Use after a release succeeds, when maintainers need to sync apps/kimi-code/CHANGELOG.md into docs/en/release-notes/changelog.md and docs/zh/release-notes/changelog.md, then open a PR on a dedicated branch.
72
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
kimi-code uses changesets for versioning. Each package gets its own CHANGELOG.md. The user-facing CLI package, @moonshot-ai/kimi-code, writes its changelog here:
apps/kimi-code/CHANGELOG.mdThis file is the only upstream source for the documentation-site changelog. Internal package changelogs such as packages/*/CHANGELOG.md do not go into the documentation site.
After the release flow finishes (Release PR merged → Version Packages completed → npm publish succeeded), maintainers manually run this skill to copy the new CLI changelog entries into the docs site, translate the English increment into Chinese, wait for an optional human review, then commit on a dedicated branch and open a PR.
apps/kimi-code/CHANGELOG.md contains version blocks that are not yet in docs/en/release-notes/changelog.md.gen-docs flow does not run this automatically; maintainers must explicitly do it after release.Do not run this before the Release PR is merged. At that point, changesets has not yet written the new version into apps/kimi-code/CHANGELOG.md.
| File | Role | Edited by |
|---|---|---|
apps/kimi-code/CHANGELOG.md | Only upstream source, generated by changesets | Never edit manually |
docs/en/release-notes/changelog.md | English docs changelog; source of truth for docs | This skill |
docs/zh/release-notes/changelog.md | Chinese docs changelog, translated from English | This skill, following translate-docs |
Core rule: the English docs changelog is the source of truth, and Chinese is translated from English. This matches translate-docs.
Before editing, confirm:
npm view @moonshot-ai/kimi-code versions --json) or has a matching GitHub Release tag.apps/kimi-code/CHANGELOG.md is that new version.If any condition is not true, stop and confirm with the user.
Do not edit or commit directly on main. All sync work happens on a dedicated branch created in step 1.
Start from an up-to-date default branch:
git fetch origin
git checkout main
git pull --ff-only origin mainBefore creating the branch, peek at the version range so the branch name matches the newest version being synced:
rg '^## ' apps/kimi-code/CHANGELOG.md | head -5
rg '^## ' docs/en/release-notes/changelog.md | head -5Name the branch after the newest upstream version that is not yet in the English docs page:
docs/changelog-sync-<newest-version>Example: syncing 0.2.1 only → docs/changelog-sync-0.2.1.
git checkout -b docs/changelog-sync-<newest-version>If the branch already exists locally or on the remote, stop and confirm with the user instead of reusing it.
Use the same version lists from step 1. Confirm:
Use upstream order: newest version first.
Upstream entries look like this:
- [#317](https://github.com/...) [`2f51db4`](https://github.com/...) Thanks [@user](https://github.com/...)! - Clean up lint warnings ...Changesets may add a Thanks ...! credit, but it must be removed every time. Keep:
## 0.2.0.Thanks ...! credit have been removed.Remove:
# @moonshot-ai/kimi-code because the docs page already has # Changelog.### Patch Changes, ### Minor Changes, and ### Major Changes.[#317](...).[`2f51db4`](...).Thanks [@user](...)! credit, including the multi-author form Thanks [@a](...), [@b](...)!. Drop the whole Thanks ...! segment every time, regardless of whether the feature is enabled.After stripping, each entry is - <body text>.
Drop SDK-only and provider-internal detail. This changelog serves @moonshot-ai/kimi-code CLI and web users. Within an entry, keep only what CLI/web users can perceive, and remove sentences that document internals instead of user-visible behavior. Apply this on both the English and Chinese pages:
getExperimentalFeatures() — that belongs in the SDK changelog, not here.<tools_added>, protocol field explanations, "the wire protocol is unchanged", cache-hit mechanics) unless they are the behavior a user perceives.Do not change facts or drop a real user-facing behavior — only trim the internal-only scaffolding. For over-long, internal-heavy entries, this trim applies on the English page too, not only in translation.
Web UI prefix: if the entry is a web UI change, prefix the body text with web: so readers can tell it affects the web UI:
- web: <body text>An entry counts as a web UI change when its upstream commit touches apps/kimi-web/. Check with git show --name-only <hash> (the commit hash is the one stripped above). gen-changesets writes this prefix for web changes, so it is usually already present in upstream — preserve it when it is there, and add it when a web entry lacks it. When a commit touches both web and non-web code, use web: only if the user-facing change described by the entry is in the web UI. Keep the web: prefix on the Chinese page too — it is a scope marker, not translated text.
Upstream language rule: gen-changesets requires changelog entries to be English. If the upstream CLI changelog contains a non-English entry, stop and report it to the user. Do not silently rewrite it while syncing docs.
Public-text rule: do not copy real internal endpoints, key names, account names, or service names into docs changelogs. Replace examples with neutral placeholders such as example.com, example.test, or YOUR_API_KEY while preserving the user-visible meaning.
Before classifying, merge related entries and drop redundant ones from the user-facing changelog:
web: prefix if the combined change is still web-facing.Bug Fixes section tends to accumulate many narrow UI/polish fixes that read as noise when listed one by one. When three or more fixes target the same area (for example several tool cards in the TUI, or the web session/conversation surface) or the same class of problem (for example several "jumping/flickering/collapsing during streaming" fixes), merge them into one higher-level entry. Examples:
web: if the merged fixes are all web-facing. Classify as Bug Fixes.web: entry and drop the API entry. CLI and web users perceive the web page; the backing API is implementation detail with no independent user value on this changelog. Keep the API entry only when it has independent user value — a new public endpoint that SDK or server consumers call directly, or a capability usable outside the web feature. When unsure, keep both and let the reviewer decide.The docs changelog uses five section types:
| English section | Chinese section | Meaning |
|---|---|---|
### Features | ### 新功能 | New user-facing functionality, such as a new command, flag, mode, or capability that did not exist before |
### Polish | ### 优化 | User-visible improvements to existing functionality, including UX adjustments, behavior tweaks, and performance improvements that are not fixes or new capabilities |
### Bug Fixes | ### 修复 | Fixes for behavior that was broken |
### Refactors | ### 重构 | Internal changes with no user-visible behavior change, including build, CI, tests, dependency cleanup, and internal renames |
### Other | ### 其他 | Anything that does not fit above, such as CDN/endpoint swaps and docs-related artifacts |
Classification process:
git show <hash>.gh pr view <NNN>.Other. Do not guess or force entries into Features.Features vs. Polish: ask whether the entry introduces something the user could not do before. If yes (new command, flag, mode, viewer, or capability), use Features. If it only improves an existing surface (a UI panel that already existed, an existing prompt, an existing tool card, an existing payload pipeline), use Polish. Verbs like Add do not automatically mean Features — a small visual addition to an existing UI is still polish.
Default-behavior changes: changing the default value of an existing capability (for example flipping a feature on by default) is usually Polish, because the capability already existed. Use Features only when the new default materially changes the out-of-box experience for most users in a way they could not get before. When genuinely ambiguous, flag it and confirm with the reviewer rather than guessing.
Keyword hints:
Add ... command/flag/option/mode/viewer, Introduce, Support, Allow, Enable, Implement, New ... command/flag/optionFix, Resolve, Correct, Address, Prevent ... from, Stop ... from, ... no longer ...Polish, Optimize, Improve, Enhance, Speed up, Reduce, Cap, Shorten, Wrap, Clarify, Tweak, Adjust, Offload, Show ... in existing surface, performance and UX adjustments to existing featuresRefactor, Rename, Clean up, Simplify, Remove unused, Migrate to, Unify, Restructure, Internal, dependency bumps, pure CI/build/test changesWithin each version, section order is:
Features → Polish → Bug Fixes → Refactors → OtherOmit empty sections. Within each section, order entries by reader value, not upstream order:
Polish, put directly user-visible UX or performance improvements (something users can see or feel) before protocol or internal-behavior adjustments (something that makes the model or pipeline behave more reliably but is invisible to users).Do not reword or exaggerate entries just to make them look more important; only reorder existing entries.
Never change the English page header:
# Changelog
This page documents the changes in each Kimi Code CLI release.Insert new version blocks immediately after the header paragraph and before the previous latest version.
Every version heading must carry its release date in parentheses:
## <version> (YYYY-MM-DD)Take the date from the version's published GitHub Release tag, not from when you run the sync:
git log -1 --format=%cs "@moonshot-ai/kimi-code@<version>"Use the half-width parenthesis form (YYYY-MM-DD) on the English page. Never invent or guess a date; if the tag is missing, stop and confirm with the user.
Example:
## 0.2.0 (2026-05-26)
### Bug Fixes
- Fix the TUI not restoring the current todo list after resuming a session.
### Refactors
- Clean up lint warnings across the CLI, SDK examples, and bundled runtime code without changing product behavior.
- Update the native release workflow to use current GitHub artifact actions.After updating the English page, translate only the newly added English content into docs/zh/release-notes/changelog.md.
Follow translate-docs, direction en → zh. Changelog direction is English-to-Chinese even though many other docs flows use Chinese-to-English.
Chinese page requirements:
Header:
# 变更记录
本页记录 Kimi Code CLI 每个版本的变更内容。Preserve version headings including the release date, but use full-width parentheses on the Chinese page, such as ## 0.2.0(2026-05-26). The date must match the English page; only the parenthesis style differs (half-width () in English, full-width () in Chinese).
Translate section headings exactly:
### Features → ### 新功能### Bug Fixes → ### 修复### Polish → ### 优化### Refactors → ### 重构### Other → ### 其他The Chinese page must mirror the English page 1:1 for versions, sections, section order, entry order, and entry counts.
Keep the classification and entry order from the English page. Do not reclassify or reorder while translating.
Translate only entry body text. Do not add entries that are not present in English.
Follow docs/AGENTS.md for Chinese typography: full-width punctuation, spaces between Chinese and English, and the glossary.
Structural fidelity does not mean literal translation. The Chinese entries should read like a concise, idiomatic Chinese changelog. Keep the same facts as the English entry, but rephrase for natural Chinese prose.
Guidelines:
通过缓存已渲染消息行,使终端在长篇对话中保持响应。缓存已渲染消息行,提升长对话下终端的响应速度。加固默认系统提示词和内置工具描述。优化默认系统提示词与内置工具描述,避免 Agent 阻塞后台任务。插件现在可以在其清单中声明 hooks。插件现支持在 kimi.plugin.json 中声明生命周期 hooks。--allowed-host--allowed-host <host>传入 --allowed-host 以允许额外的 host。例如 ... (多句展开)例如 kimi web --allowed-host example.com。web: scope prefix as-is.Example — translating a feature entry:
English source:
- Add a --allowed-host flag to kimi web that lets extra Host header values pass the DNS-rebinding check, and include allow guidance in the 403 error message. Pass --allowed-host <host> to allow an extra host.Before (literal, wordy):
- 为 `kimi web` 新增 `--allowed-host` 标志,允许额外的 Host 请求头值通过 DNS 重绑定检查,并在 403 错误消息中包含允许指引。传入 `--allowed-host <host>` 以允许额外的 host。例如 `kimi web --allowed-host example.com`。After (concise, idiomatic):
- `kimi web` 新增 `--allowed-host <host>` 选项,可将指定 Host 加入 DNS 重绑定白名单;403 错误会提示如何通过 `--allowed-host` 或 `KIMI_CODE_ALLOWED_HOSTS` 放行,例如 `kimi web --allowed-host example.com`。Review:
git diff docs/en/release-notes/changelog.md docs/zh/release-notes/changelog.mdCheck:
Thanks ...! credit remains (remove it every time).Then run the docs build:
pnpm --filter docs run buildAfter verification passes, before committing, ask the user whether they want to review the sync result. Use AskQuestion with options such as:
If the user chooses review:
Show the uncommitted diff:
git diff docs/en/release-notes/changelog.md docs/zh/release-notes/changelog.mdSummarize synced versions, section counts, and anything that needed manual classification.
Tell the user to reply when they are done reviewing, or to ask for edits.
Do not commit, push, or open a PR until the user explicitly says review is complete, or asks to proceed.
If the user requests edits during review, make the changes, re-run verification from step 7, and return to this checkpoint.
Only run this step when the user skipped review or confirmed review is complete.
Stage only the changelog docs files:
git add docs/en/release-notes/changelog.md docs/zh/release-notes/changelog.mdUse a neutral docs-sync commit message:
docs(changelog): sync <version range> from apps/kimi-code/CHANGELOG.mdDo not create a changeset for changelog docs sync. Docs sync does not enter the bundle.
Run immediately after step 9.
Push the branch:
git push -u origin HEADCreate the PR with gh pr create. Title follows Conventional Commits:
docs(changelog): sync <version range> from apps/kimi-code/CHANGELOG.mdFill in .github/pull_request_template.md. For changelog sync PRs:
N/A — post-release docs maintenance (no issue required).pnpm --filter docs run build).gen-docs is not needed because this is the dedicated changelog sync flow.Example body:
## Related Issue
N/A — post-release docs maintenance
## Problem
The docs-site changelog has not yet been synced for `<version range>` after the npm release.
## What changed
- Synced `<version range>` from `apps/kimi-code/CHANGELOG.md` into `docs/en/release-notes/changelog.md`
- Translated the new English increment into `docs/zh/release-notes/changelog.md`
- Verified with `pnpm --filter docs run build`
## Checklist
- [x] I have read the CONTRIBUTING document.
- [x] I have linked a related issue, or explained the problem above.
- [ ] I have added tests that prove my feature works. (N/A — docs-only sync)
- [x] Ran `gen-changesets` skill, or this PR needs no changeset. (No changeset — docs sync is out of bundle)
- [x] Ran `gen-docs` skill, or this PR needs no doc update. (This PR is the dedicated changelog sync)Return the PR URL to the user when done.
apps/kimi-code/CHANGELOG.md..changeset/*.md drafts into the docs site.web: (when the upstream commit touches apps/kimi-web/), and keep the prefix on both the English and Chinese pages.docs/changelog-sync-* branch and open a PR; never push changelog docs sync directly to main.| Mistake | Fix |
|---|---|
| Adding entries directly to the English docs page without reading upstream | Use apps/kimi-code/CHANGELOG.md as the source |
| Copying PR links or commit hashes into docs | Strip them; keep only body text |
Leaving the Thanks ...! credit in docs | Remove it every time, including the multi-author form |
| Leaving near-duplicate micro-tweaks as separate bullets | Merge small tweaks to the same surface into one higher-level entry (e.g. composer height + font → composer's default styling) |
| Listing many narrow fixes to the same surface as separate bullets | When three or more fixes target the same UI area or the same class of problem, merge them into one higher-level fix entry; keep genuinely distinct or high-value fixes standalone |
| Listing a server/API entry that only backs a web feature already listed | Drop the API entry and keep the web: entry, unless the API has independent user value |
| Rewording upstream English entries | Upstream is frozen; copy the body text unless the user explicitly asks otherwise |
| Leaving English text untranslated in the Chinese page | The Chinese page must be fully Chinese except preserved technical terms |
| Editing upstream changelog text | Do not edit upstream |
| Losing two-space indentation in multi-line list items | Restore indentation so Markdown lists stay valid |
Copying ### Patch Changes into docs | Remove changesets headings and classify under Features / Bug Fixes / Polish / Refactors / Other |
| Guessing unclear entries as Features | Inspect commit/PR; if still unclear, use Other |
Treating any Add ... line as Features | If the entry only adds a small element to an existing UI/surface, use Polish |
| Filing UX or performance tweaks under Other | Use Polish for user-visible improvements to existing functionality |
| Preserving upstream order when a small entry hides a larger change | Reorder within the section so the highest-value, most obvious items appear first |
| Reclassifying entries while translating | Chinese classification must mirror English |
| Leaving empty sections | Delete sections with no entries |
| Putting everything under Other for convenience | Classify what can be classified first |
| Translating tool names, command names, or config keys | Keep them as written |
| Creating a changeset for docs sync | Do not create one |
Committing or pushing directly on main | Create docs/changelog-sync-<version>, commit there, then open a PR |
| Committing or opening a PR before the user skips review or confirms review is done | Wait at the human review checkpoint |
| Using curly quotes or half-width Chinese punctuation | Follow docs/AGENTS.md |
| Omitting the release date from a version heading, or guessing it | Add (YYYY-MM-DD) (full-width () in Chinese) taken from the published tag |
Forgetting or translating the web: prefix on web UI entries | Prefix web UI entries (commit touches apps/kimi-web/) with web: on both pages; keep the prefix as-is when translating |
apps/kimi-code/CHANGELOG.md is not published on npm or GitHub Releases.apps/kimi-code/CHANGELOG.md.docs/AGENTS.md does not answer it.docs/changelog-sync-* branch already exists for the same version and you cannot confirm whether it is stale.77618e3
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.