Kimi Code

Install Kimi Code before setup. The integration key is kimi.

Multi-Install Safety

This integration is not declared multi-install safe. See the shared multi-install rules.

Setup

specify init my-project --integration kimi

For an existing Spec Kit project, use specify integration install kimi. See integration management for activation, upgrades, and removal.

Installed Skills

Skills are installed as .kimi-code/skills/speckit-<command>/SKILL.md. Invoke them in Kimi's chat using the skill-colon prefix, for example /skill:speckit-specify or /skill:speckit-bug-assess for the installed bug extension.

The optional --integration-options="--skills" flag restates the default; this integration always scaffolds skills.

Legacy Migration

Pass --integration-options="--migrate-legacy" when upgrading an old installation to move skills from .kimi/skills/ to .kimi-code/skills/. Migration also converts dotted skill names such as speckit.xxx to hyphenated names such as speckit-xxx:

specify integration upgrade kimi --integration-options="--migrate-legacy"

Setup writes the new skills first. A legacy directory is moved only if its new target does not exist. If a target already exists, the old directory is removed only when both SKILL.md files are byte-identical and the legacy directory has no additional files. Differing legacy content and extra user files are retained for manual reconciliation. Symlinked legacy paths are skipped; symlinked destination components are rejected.

Legacy Cleanup on Uninstall

Normal manifest-tracked files use the shared modified-file protection. In addition, teardown removes legacy .kimi/skills/speckit-* and speckit.* directories identified by generated metadata.author and metadata.source. That legacy cleanup does not compare recorded hashes or require --force; back up edited legacy skills and additional files inside those directories before uninstalling.

Workflow Dispatch

Workflow steps use kimi -p <prompt> with /skill:speckit-<command> invocations and forward a configured --model. Structured-output requests use --output-format stream-json (JSONL events), not the unsupported json value.