Skip to main content

release

Execute the release workflow for Kimi Code CLI packages.

Source facts

Repository
MoonshotAI/kimi-cli
Last source activity
September 21, 2026 at 15:20
Detected SKILL.md language
English
Stars
11,431
Forks
1,340

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
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 1. **Understand the automation.** Read `AGENTS.md` and `.github/workflows/release*.yml` so you know what each release workflow expects before changing any versions. 2. **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`, and `git 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-code` is a thin wrapper and must stay version-synced with `kimi-cli`, so treat it as changed whenever the root package changes. 3. **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. 4. **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. 5. **Update version metadata and changelogs.** For each changed package: - Update its `pyproject.toml`. - Update `CHANGELOG.md`, keeping the `## Unreleased` header empty in place (do **not** rename it — add a new dated `## <version> (YYYY-MM-DD)` section below it). - Update `breaking-changes.md` in both languages if there are breaking changes. - If bumping `packages/kosong` or `packages/kaos`, also update the root `pyproject.toml` pinned dependency (`kosong[contrib]==<version>` or `pykaos==<version>`) so root validation keeps passing. 6. **Sync the `kimi-code` wrapper when the root version changes.** Bump `packages/kimi-code/pyproject.toml` `version` to match the new root version. It is a legacy stub with no dependencies — do not add a `kimi-cli` pin back. 7. **Run `uv sync`** to refresh the lockfile. 8. **Update docs.** Follow the `gen-docs` skill to make sure docs reflect the release. 9. **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-code` if the root moved) reflects the version agreed in step 3. - **Dependency pins** — the root `pyproject.toml` pins (`kosong[contrib]==<version>`, `pykaos==<version>`) match the bumped versions. - **Documentation** — CHANGELOG entries are added below `## Unreleased` (Unreleased still present and empty), `breaking-changes.md` is updated in both languages if applicable, and `gen-docs` left no inconsistencies. Wait for explicit user approval before proceeding. If the user flags anything, fix it and re-confirm — do not push. 10. **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): ```markdown ## 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> ``` ``` 11. **Hand off the tag step.** After merge, switch to `main`, pull latest, and tell the user the exact `git tag` command for the final release tag (pick the right tag pattern from the table above — e.g. `git tag 1.43.0` for a root release, `git tag kosong-0.54.0` for 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 sync` fails or produces unexpected `uv.lock` churn beyond the version bump. - `gen-docs` reports a doc inconsistency you cannot resolve. - PR checks go red after push — investigate, do **not** `--no-verify` or force-merge. - The release workflow fails after tag push — read the workflow logs and surface the failure, do not retag silently.
View on GitHub