pybind11 Release Preparation
pybind/pybind11
Opens the pybind11 release-preparation pull request: picking the release base, bumping the version in common.h and integrating the changelog, following docs/release.rst.
Releases the Python SDKs (a2ui-core, a2ui-agent-sdk) to PyPI by running preflight checks, dispatching the release workflow as a dry run, confirming with the maintainer, publishing, and following the…
$ npx skills add a2ui-project/a2ui --skill a2ui-release-python -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install a2ui-project/a2ui a2ui-release-python --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/a2ui-project/a2ui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/a2ui-release-python .claude/skills/a2ui-release-python && rm -rf skills-srcUse ~/.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/
Install the "a2ui-release-python" agent skill from https://github.com/a2ui-project/a2ui/tree/main/.agents/skills/a2ui-release-python into .claude/skills/a2ui-release-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2ui-release-python", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/a2ui-project/a2ui/tree/main/.agents/skills/a2ui-release-pythonType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add a2ui-project/a2ui --skill a2ui-release-python -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install a2ui-project/a2ui a2ui-release-python --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/a2ui-project/a2ui.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/a2ui-release-python .agents/skills/a2ui-release-python && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "a2ui-release-python" agent skill from https://github.com/a2ui-project/a2ui/tree/main/.agents/skills/a2ui-release-python into .agents/skills/a2ui-release-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2ui-release-python", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add a2ui-project/a2ui --skill a2ui-release-python -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install a2ui-project/a2ui a2ui-release-python --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/a2ui-project/a2ui.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/a2ui-release-python .cursor/skills/a2ui-release-python && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "a2ui-release-python" agent skill from https://github.com/a2ui-project/a2ui/tree/main/.agents/skills/a2ui-release-python into .cursor/skills/a2ui-release-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2ui-release-python", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/a2ui-project/a2ui.git --path .agents/skills/a2ui-release-python--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add a2ui-project/a2ui --skill a2ui-release-python -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install a2ui-project/a2ui a2ui-release-python --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/a2ui-project/a2ui.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/a2ui-release-python .gemini/skills/a2ui-release-python && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "a2ui-release-python" agent skill from https://github.com/a2ui-project/a2ui/tree/main/.agents/skills/a2ui-release-python into .gemini/skills/a2ui-release-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2ui-release-python", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install a2ui-project/a2ui a2ui-release-pythonInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add a2ui-project/a2ui --skill a2ui-release-python -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/a2ui-project/a2ui.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/a2ui-release-python .github/skills/a2ui-release-python && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "a2ui-release-python" agent skill from https://github.com/a2ui-project/a2ui/tree/main/.agents/skills/a2ui-release-python into .github/skills/a2ui-release-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2ui-release-python", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add a2ui-project/a2ui --skill a2ui-release-python -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install a2ui-project/a2ui a2ui-release-python --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/a2ui-project/a2ui.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/a2ui-release-python .opencode/skills/a2ui-release-python && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "a2ui-release-python" agent skill from https://github.com/a2ui-project/a2ui/tree/main/.agents/skills/a2ui-release-python into .opencode/skills/a2ui-release-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2ui-release-python", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
a2ui-release-pythonReleases the Python SDKs (a2ui-core, a2ui-agent-sdk) to PyPI by running preflight checks, dispatching the release workflow as a dry run, confirming with the maintainer, publishing, and following the…
A2ui Release Python is an agent skill from a2ui-project/a2ui. Releases the Python SDKs (a2ui-core, a2ui-agent-sdk) to PyPI by running preflight checks, dispatching the release workflow as a dry run, confirming with the maintainer, publishing, and following the changelog pull request through to merge. Use when asked to cut, publish, or release a Python SDK version.
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Building AI agents, Changelog and release notes and Pull requests. It works with Python. The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit ae466ff. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
gitghpython3uvgcloudFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
pypi.orgFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GITHUB_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
A2ui Release Python loads about 4.2k tokens when it runs. Until then it costs about 81 tokens; SKILL.md has 2,037 words of instructions outside code blocks.
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.
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.
The full file from a2ui-project/a2ui at commit ae466ff, republished under its Apache-2.0 licence (© a2ui-project). 2,037 words, ~4,231 tokens.
.claude/skills/a2ui-release-python/SKILL.md (or your agent's skills folder).This skill turns a one-line request such as "release a2ui-core patch" or "release the Python SDKs" into the full release sequence.
Publishing is done by the Release Python SDKs workflow. This skill does not reimplement any of it. Its job is the part the workflow cannot do for itself: choosing the bump, catching the problems that a workflow run would discover too late, and following through afterwards.
Background for anything not covered here: docs/contributing/release.md.
[!CAUTION] Publishing to PyPI is irreversible. A version can be yanked but never reused or deleted. Step 4 is a mandatory stop. Never dispatch a run with
dry_run: falsewithout an explicit go-ahead from the maintainer in the current conversation.
The workflow performs the release. Nothing here does. Building, tagging,
pushing tags, staging in the Artifact Registry and triggering the Exit Gate all
happen inside release-pypi.yml, and only there. It could not be otherwise: the
Exit Gate authenticates by matching the OIDC claim
…/release-pypi.yml@refs/heads/main, so a local upload has no credentials to
use.
| Run locally | Run by the workflow |
|---|---|
release_version.py notes | release_version.py plan (authoritative) |
release_version.py plan (preview only) | release_version.py check |
release_version.py check (preview only) | release_version.py cut-changelog |
gh workflow run, gh run view, gh pr list | release_artifacts.py, confirm_pypi.py |
uv build, twine upload, git tag, git push |
The local calls are limited to the read-only subcommands notes, next,
current, tag, plan and check. They exist to answer two questions before
spending a CI run: is there anything to release, and will preflight reject it.
[!IMPORTANT] A local
planis a prediction, not the release. It is computed from the tags in the local checkout, so it is only as current as the last fetch — which is why Step 1 fetches first. The plan the workflow computes is the one that counts, and Step 3 reads it back out of the run before anyone approves it.
Never run cut-changelog --write, git tag, git push, uv build or twine
by hand to perform a release. If the workflow cannot do it, fix the workflow.
[!IMPORTANT] One exception, and it is deliberate: the changelog pull request has to be opened by a person, not by the workflow. GitHub does not start workflow runs for events caused by
GITHUB_TOKEN, so a pull request the workflow opened would never get the required checks and could never be merged. The workflow pushes the branch; Step 6 opens the pull request.
Two things are needed: PACKAGE (a2ui-core, a2ui-agent-sdk, or both) and
BUMP (patch, minor, or major). Derive both from the changelogs. Never
infer them from the phrasing of the request.
Fetch first. Versions are derived from tags, so every number below is wrong if the checkout is behind:
git fetch origin main --tagspython3 .github/scripts/release_version.py notes --package a2ui-core
python3 .github/scripts/release_version.py notes --package a2ui-agent-sdkChoose the packages. Release only those with a non-empty ## Unreleased.
Empty output means that package has nothing to release, whatever was asked for.
A plural request such as "release the Python SDKs" does not mean both — if
only one has pending entries, that one is the release. If neither does, stop and
say so.
Check the exit status, not just the output. The two failure shapes are different answers:
| Result | Meaning | Do |
|---|---|---|
| exit 0, output | Entries pending | Release this package |
| exit 0, no output | ## Unreleased is empty | Skip this package |
exit 1, error: on stderr | Changelog is malformed, usually a missing ## Unreleased heading | Stop. Report it and do not dispatch. |
[!NOTE] Dispatching
bothwhen one side is empty is not dangerous, just wasteful. The plan builds, then preflight rejects the empty package and the run fails several minutes in. The check above costs a second.
Choose the bump. Read the entries: fixes only means patch, new features
mean minor, a breaking change means major. Preview the result with plan,
which returns exactly what the workflow will compute — version, tag and release
notes for every selected package:
python3 .github/scripts/release_version.py plan --package "${PACKAGE}" --bump "${BUMP}"[!IMPORTANT]
bothapplies one bump level to both packages. The workflow takes a singlebumpinput, sobuild_planraises both versions by the same amount. When the two warrant different levels — say fixes ina2ui-coreand a feature ina2ui-agent-sdk— there is no single right answer. Put the choice to the maintainer:
- Take the higher level for both. One release, one changelog pull request. The cost is an over-bumped version on the quieter package.
- Run two single-package releases. Correct versioning, but the changelog pull request from the first must be merged before starting the second, or the Step 2 guard will block it. Release
a2ui-corefirst if both are going out, sincea2ui-agent-sdkdepends on it.
Put the proposal to the maintainer with ask_question, showing the pending
entries and the resulting versions, and let them correct it.
These checks cost seconds and catch the failures that are expensive to hit mid-run. Run all of them before dispatching anything.
1. No outstanding changelog branch from a previous release. This is the one
the workflow cannot detect. Until the last release's changelog lands, the
entries are still under ## Unreleased, and this release would repeat them in
its notes.
git ls-remote --heads origin 'release/changelog-*'Check the branch, not the pull request: the release stops at the branch, so there may be no pull request yet. The repository deletes branches on merge, so empty output means the last changelog landed.
Any output means stop. Get that change merged first — open the pull request if nobody has — then start over from Step 1, because the pending entries will have changed.
2. The checkout is clean and matches the remote. Step 1 already fetched. The
concern here is local edits: the workflow reads the changelogs and tags from
main, so an uncommitted changelog change makes the local preview describe a
release that is not the one that will go out.
git status --short --branchUncommitted changes under python/*/CHANGELOG.md, or a branch behind
origin/main, mean stop and say what was found.
3. The repository's own preflight passes. Use the version from Step 1. This is the same check the workflow runs, so a failure here is a failure there:
python3 .github/scripts/release_version.py check --package "${PACKAGE}" --version "${VERSION}"It rejects an empty ## Unreleased, a version that already has a tag, and an
a2ui-core version outside the range that a2ui-agent-sdk pins.
[!IMPORTANT] That last one is the usual surprise. An
a2ui-coreminor or major bump needs thea2ui-core>=...pin in a2ui_agent/pyproject.toml widened in the same release. That is a code change requiring its own reviewed pull request, so it has to land before the release, not during it. If the check reports this, stop and tell the maintainer what needs widening.
A dry run builds and stages the artifacts in the Exit Gate Artifact Registry, removes them again, and pushes nothing.
gh workflow run release-pypi.yml --repo a2ui-project/a2ui --ref main \
-f package="${PACKAGE}" -f bump="${BUMP}" -f dry_run=trueWait a few seconds, then find the run and watch it:
gh run list --repo a2ui-project/a2ui --workflow=release-pypi.yml --limit 1 \
--json databaseId,status,url
gh run watch "${RUN_ID}" --repo a2ui-project/a2ui --exit-status[!TIP] Use the full
databaseId. A truncated run ID returns 404.
If it fails, read the failing step's log and consult Troubleshooting below before retrying.
When it passes, read back the plan the run actually computed. The dry run does not upload the plan artifact, and step summaries are not available over the API, but the plan step prints the JSON into the log:
gh run view "${RUN_ID}" --repo a2ui-project/a2ui --log \
| grep -A 20 'Build the release plan'Compare it against the local plan output from Step 1. They are computed the
same way and should agree. If they differ, a tag landed in between — stop and
work out why before going any further.
Stop here. Show the maintainer:
Quote the version numbers in full, for example a2ui-agent-sdk 0.7.0. Do not
describe the release only as "a minor bump" — the bump level is the input, the
version is the irreversible consequence, and it is the version the maintainer
needs to approve.
Then ask for explicit confirmation to publish. Proceed only on a clear yes.
AUTHOR_NAME=$(git config user.name)
AUTHOR_EMAIL=$(git config user.email)
gh workflow run release-pypi.yml --repo a2ui-project/a2ui --ref main \
-f package="${PACKAGE}" -f bump="${BUMP}" -f dry_run=false \
-f author_name="${AUTHOR_NAME}" -f author_email="${AUTHOR_EMAIL}"Watch it as in Step 3. The run pushes the tags, stages the artifacts, uploads the manifest that triggers the Exit Gate, and creates the GitHub releases.
Four jobs follow:
| Job | What it does | If it fails |
|---|---|---|
build | Runs tests and builds distributions | Test failure or malformed distribution. See Troubleshooting. |
release | Stages, tags, and triggers publishing | Real failure. See Troubleshooting. |
confirm | Polls PyPI, then links the GitHub releases | A timeout is not a failure. The hourly Confirm PyPI publication workflow finishes the job. |
changelog | Pushes the changelog branch | Publishing already succeeded. Cut the changelog by hand and open the PR yourself. |
[!IMPORTANT] The run stays active for several minutes after
releasegoes green, and that is normal. Triggering the Exit Gate is not publishing. The Exit Gate works asynchronously and reports only by email, so theconfirmjob sits and polls PyPI every 30 seconds for up to 20 minutes waiting for the version to appear.
gh run watchblocks until all three jobs finish, so it is the wait. Let it run. Do not poll PyPI in a loop alongside it, and do not report the release as finished — or as failed — whileconfirmis still in progress.
A release is not done when the workflow goes green.
Confirm the version is live. The waiting has already happened on the
runner, so read the confirm job's outcome rather than starting a fresh
wait:
confirm succeeded — the version is on PyPI and the GitHub releases
have been updated with links. Verify once and move on:
curl -s -o /dev/null -w '%{http_code}\n' "https://pypi.org/pypi/${PYPI_NAME}/${VERSION}/json"200 confirms it. A 404 here, after confirm reported success, is a CDN
lag of a minute or two — wait briefly and check again.
confirm timed out — publishing took longer than 20 minutes. This is
not a failed release. The artifacts are staged and the Exit Gate still
has them. Do not re-run the release, and do not try to publish the version
again: that would burn a version number. Tell the maintainer it is
outstanding, and leave it to the hourly
Confirm PyPI publication
workflow, which finds the release by its pending marker and links it once
PyPI catches up. The Exit Gate also emails
a2ui-core-working-group@google.com with the outcome either way.
confirm failed for another reason — read the log. The publish itself
may still have succeeded, so check PyPI before concluding anything.
Open the changelog pull request and get it merged. The release pushed the branch but deliberately did not open the pull request — see "What runs where". Open it yourself:
BRANCH=$(git ls-remote --heads origin 'release/changelog-*' \
| sed 's#.*refs/heads/##')
gh pr create --repo a2ui-project/a2ui --base main --head "$BRANCH" \
--title "chore(release): changelog for ${RELEASED}" \
--body "Moves the \`## Unreleased\` entries under the released versions."Check the diff touches only CHANGELOG.md files, then ask the maintainer to
review it. Do not leave it open: Step 2 blocks the next release until the
branch is gone.
Report the published versions, the GitHub release links, and the changelog pull request link.
could not find any workflows named release-pypi.yml — the workflow is only
dispatchable once it is on main. Check it has merged.
HTTP 403 from Artifact Registry — the Exit Gate allowlists
a2ui-project/a2ui only. This is the expected result on a fork, and not a bug.
On the real repository it means the builder identity no longer matches; see
go/oss-exit-gate-builders.
Permission denied or a failed OIDC exchange — the Exit Gate matches the
workflow path and branch exactly:
github_workflow:a2ui-project/a2ui/.github/workflows/release-pypi.yml@refs/heads/mainRenaming or moving the workflow file breaks releases until the internal config
is updated. It also cannot be triggered from a branch or a tag, only main.
... is already on PyPI — the version was published previously. It cannot be
republished. Work out why the tag series and PyPI disagree before retrying.
A dry run or failed staging left artifacts behind — the cleanup step runs even on partial failure, but if it was itself skipped, remove the staged version by hand:
gcloud artifacts versions delete "${VERSION}" --package="${PYPI_NAME}" \
--repository=a2ui--pypi --location=us --project=oss-exit-gate-prod --quiethatch-vcs, and
the workflow verifies the built artifacts against the version it planned..github/scripts/ are safe to run read-only for notes, next,
current, tag, and check. Everything else belongs to the workflow.dry_run: false without the Step 4 confirmation.© a2ui-project, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/a2ui-release-python of a2ui-project/a2ui.
Open the folder on GitHubat commit ae466ff
A2ui Release Python 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| A2ui Release Python this skilla2ui-project/a2ui | 17k | — | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| pybind11 Release Preparationpybind/pybind11 | 18k | — | ~1.7k | Automated safety check: Pass | Custom licence | |
| Coding Agentmastra-ai/mastra | 29k | — | ~2.3k | Automated safety check: Pass | Custom licence | |
| Changelog Draft Generatorwarpdotdev/warp | 65k | 1 repos | ~3.1k | Automated safety check: Pass | AGPL-3.0 | |
| StarRocks Release NotesStarRocks/starrocks | 12k | — | ~1.9k | Automated safety check: Notes | Apache-2.0 | |
| Git Workflow and Versioningaddyosmani/agent-skills | 102k | 2 repos | ~3.5k | Automated safety check: Notes | MIT |
pybind/pybind11
Opens the pybind11 release-preparation pull request: picking the release base, bumping the version in common.h and integrating the changelog, following docs/release.rst.
mastra-ai/mastra
Authoring playbook for building agents that write, edit, review, or refactor code.
warpdotdev/warp
Builds a reviewable changelog draft from the PRs merged between two release cuts, with contributor attribution and Markdown and JSON outputs.
StarRocks/starrocks
Drafts English release notes for a StarRocks patch release from the PRs merged into its release branch, then opens a documentation PR and hands translation to /translate.
addyosmani/agent-skills
Sets git habits for every change: short-lived branches, atomic commits with descriptive messages, clean pull requests, plus versioning, tagging and changelogs for releases.
nexmoe/eve
Universal release workflow. An agent skill from nexmoe/eve.
a2ui-project/a2ui
Remediates a specific recommendation from an A2UI compliance report issue, or resolves any general GitHub issue, by inspecting context, implementing minimal targeted fixes, verifying tests, creating…
a2ui-project/a2ui
Automates the triage of GitHub issues in the A2UI repository.
a2ui-project/a2ui
Main coordination skill to run the blueprint compliance, documentation synchronization, and test quality audits, posting the combined results as a labeled GitHub issue.
a2ui-project/a2ui
Iterative benchmarking, evaluation, and algorithmic optimization of alternative A2UI inference formats (such as Express, Atom, and Elemental).
a2ui-project/a2ui
Automated generator for strongly typed Pydantic v2 data models and basic catalogs across any A2UI protocol version (v0.8, v0.9, v0.9.1, v1.0, etc.).
a2ui-project/a2ui
Grounding, architectural standards, Python best practices, package facade conventions, testing, and verification workflows for developing any Python code across the entire A2UI repository (core…
Works with
Categories
Releases the Python SDKs (a2ui-core, a2ui-agent-sdk) to PyPI by running preflight checks, dispatching the release workflow as a dry run, confirming with the maintainer, publishing, and following the…. A2ui Release Python is an agent skill from a2ui-project/a2ui. Releases the Python SDKs (a2ui-core, a2ui-agent-sdk) to PyPI by running preflight checks, dispatching the release workflow as a dry run, confirming with the maintainer, publishing, and following the changelog pull request through to merge.
A2ui Release Python fits situations like: release a Python SDK version; tasks that involve Building AI agents; tasks that involve Changelog and release notes.
Run `npx skills add a2ui-project/a2ui --skill a2ui-release-python -a claude-code`. Or copy the skill folder (.agents/skills/a2ui-release-python in a2ui-project/a2ui) into .claude/skills/a2ui-release-python in your project. Claude Code loads it when a task matches its description.
Run `npx skills add a2ui-project/a2ui --skill a2ui-release-python -a codex`. Or copy the skill folder (.agents/skills/a2ui-release-python in a2ui-project/a2ui) into .agents/skills/a2ui-release-python in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add a2ui-project/a2ui --skill a2ui-release-python -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/a2ui-release-python, .gemini/skills/a2ui-release-python, .github/skills/a2ui-release-python and .opencode/skills/a2ui-release-python in your project.
Going by SKILL.md and its folder, A2ui Release Python needs the command-line tools its instructions call (git, gh, python3, uv and gcloud) and credentials named GITHUB_TOKEN. Our summary lists: Python 3; A credential in GITHUB_TOKEN.
SKILL.md names 1 domain. As links in the text: pypi.org. This is read from the text; nothing was executed.
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.
A2ui Release Python is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with A2ui Release Python: pybind11 Release Preparation (pybind/pybind11, 18k stars), Coding Agent (mastra-ai/mastra, 29k stars), Changelog Draft Generator (warpdotdev/warp, 65k stars) and StarRocks Release Notes (StarRocks/starrocks, 12k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
a2ui-project (a GitHub organization) maintains it in a2ui-project/a2ui, which has 16,602 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 7, 2026.
Source: a2ui-project/a2ui on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.