release
Execute the release workflow for Kimi Code CLI packages.
SKILL.md
| Name | release |
| Description | Execute the release workflow for Kimi Code CLI packages. |
name: release description: Execute the release workflow for Kimi Code CLI packages.
Release process for Kimi Code CLI packages. Tags are pushed without a v prefix and follow one of these patterns (matched by .github/workflows/release-*.yml):
| Tag pattern | Releases |
|---|---|
1.42.0 (numeric) | kimi-cli (root) + kimi-code wrapper, released together — versions must stay aligned |
kosong-0.53.0 | packages/kosong |
pykaos-0.9.0 | packages/kaos (PyPI name pykaos) |
kimi-sdk-0.3.0 | sdks/kimi-sdk |
The Rust implementation (kagent) lives in a separate repository and is not released from here.
Steps
-
Understand the automation. Read
AGENTS.mdand.github/workflows/release*.ymlso you know what each release workflow expects before changing any versions. -
Detect changed packages. Check each release unit under
packages/,sdks/, and the repo root for changes since its last release tag. Use path-scoped diffs for subpackages so unrelated repo changes do not trigger a package release, e.g.git diff kosong-0.53.0..HEAD -- packages/kosong,git diff pykaos-0.9.0..HEAD -- packages/kaos, andgit diff kimi-sdk-0.2.1..HEAD -- sdks/kimi-sdk. If nothing changed anywhere, stop and report that there is nothing to release. Note:packages/kimi-codeis a thin wrapper and must stay version-synced withkimi-cli, so treat it as changed whenever the root package changes. -
Confirm new versions with the user. For each changed package, propose a new version and confirm before editing. Versioning policy:
- Patch is always
0. - Bump the minor version for any change.
- Major only changes by explicit manual decision from the user.
- Patch is always
-
Create the release branch. Name it
bump-<package>-<new-version>. If multiple packages are being bumped together, use a single branch with a descriptive name. -
Update version metadata and changelogs. For each changed package:
- Update its
pyproject.toml. - Update
CHANGELOG.md, keeping the## Unreleasedheader empty in place (do not rename it — add a new dated## <version> (YYYY-MM-DD)section below it). - Update
breaking-changes.mdin both languages if there are breaking changes. - If bumping
packages/kosongorpackages/kaos, also update the rootpyproject.tomlpinned dependency (kosong[contrib]==<version>orpykaos==<version>) so root validation keeps passing.
- Update its
-
Sync the
kimi-codewrapper when the root version changes. Bumppackages/kimi-code/pyproject.tomlversionand itskimi-cli==<version>dependency to match the new root version. -
Run
uv syncto refresh the lockfile. -
Update docs. Follow the
gen-docsskill to make sure docs reflect the release. -
Confirm with the user before opening the PR. Summarize the staged changes and ask the user to explicitly confirm:
- Version numbers — every updated
pyproject.toml(changed package +packages/kimi-codeif the root moved) reflects the version agreed in step 3. - Dependency pins — the root
pyproject.tomlpins (kosong[contrib]==<version>,pykaos==<version>) andpackages/kimi-code'skimi-cli==<version>match the bumped versions. - Documentation — CHANGELOG entries are added below
## Unreleased(Unreleased still present and empty),breaking-changes.mdis updated in both languages if applicable, andgen-docsleft no inconsistencies.
Wait for explicit user approval before proceeding. If the user flags anything, fix it and re-confirm — do not push.
- Version numbers — every updated
-
Open the PR. Commit all changes, push, and open a PR with
gh. The PR description must follow this structure (see https://github.com/MoonshotAI/kimi-cli/pull/2225 for reference):## Summary - Bump <package> to <version> - Move the current release notes under <version> - (If applicable) Move breaking-change entries under <version> - (If applicable) Any additional noteworthy changes (dependency pin updates, etc.) ## Validation - uv run python scripts/check_version_tag.py --pyproject <pyproject> --expected-version <version> - (For root releases) uv run python scripts/check_version_tag.py --pyproject packages/kimi-code/pyproject.toml --expected-version <version> - uv run python scripts/check_kimi_dependency_versions.py --root-pyproject pyproject.toml --kosong-pyproject packages/kosong/pyproject.toml --pykaos-pyproject packages/kaos/pyproject.toml - make check ## Post-merge After this PR lands, create and push the release tag: ```sh git tag <tag> git push origin <tag> -
Hand off the tag step. After merge, switch to
main, pull latest, and tell the user the exactgit tagcommand for the final release tag (pick the right tag pattern from the table above — e.g.git tag 1.43.0for a root release,git tag kosong-0.54.0for a kosong release). The user will run the tag and push tags themselves.
Stop conditions
Fail fast — never paper over an error to keep the release moving. Stop and report back to the user when any of these happen:
- Nothing changed since the last tag → there is nothing to release.
uv syncfails or produces unexpecteduv.lockchurn beyond the version bump.gen-docsreports a doc inconsistency you cannot resolve.- PR checks go red after push — investigate, do not
--no-verifyor force-merge. - The release workflow fails after tag push — read the workflow logs and surface the failure, do not retag silently.