bhu-cli 1.46.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. bhu_cli-1.46.0.dist-info/METADATA +210 -0
  2. bhu_cli-1.46.0.dist-info/RECORD +258 -0
  3. bhu_cli-1.46.0.dist-info/WHEEL +4 -0
  4. bhu_cli-1.46.0.dist-info/entry_points.txt +4 -0
  5. kimi_cli/CHANGELOG.md +1281 -0
  6. kimi_cli/__init__.py +29 -0
  7. kimi_cli/__main__.py +43 -0
  8. kimi_cli/_build_info.py +1 -0
  9. kimi_cli/acp/AGENTS.md +92 -0
  10. kimi_cli/acp/__init__.py +13 -0
  11. kimi_cli/acp/convert.py +128 -0
  12. kimi_cli/acp/kaos.py +291 -0
  13. kimi_cli/acp/mcp.py +46 -0
  14. kimi_cli/acp/server.py +468 -0
  15. kimi_cli/acp/session.py +499 -0
  16. kimi_cli/acp/tools.py +167 -0
  17. kimi_cli/acp/types.py +13 -0
  18. kimi_cli/acp/version.py +45 -0
  19. kimi_cli/agents/default/agent.yaml +36 -0
  20. kimi_cli/agents/default/coder.yaml +25 -0
  21. kimi_cli/agents/default/explore.yaml +46 -0
  22. kimi_cli/agents/default/plan.yaml +30 -0
  23. kimi_cli/agents/default/system.md +160 -0
  24. kimi_cli/agents/okabe/agent.yaml +22 -0
  25. kimi_cli/agentspec.py +160 -0
  26. kimi_cli/app.py +807 -0
  27. kimi_cli/approval_runtime/__init__.py +29 -0
  28. kimi_cli/approval_runtime/models.py +42 -0
  29. kimi_cli/approval_runtime/runtime.py +235 -0
  30. kimi_cli/auth/__init__.py +5 -0
  31. kimi_cli/auth/oauth.py +1092 -0
  32. kimi_cli/auth/platforms.py +374 -0
  33. kimi_cli/background/__init__.py +36 -0
  34. kimi_cli/background/agent_runner.py +231 -0
  35. kimi_cli/background/ids.py +19 -0
  36. kimi_cli/background/manager.py +725 -0
  37. kimi_cli/background/models.py +105 -0
  38. kimi_cli/background/store.py +237 -0
  39. kimi_cli/background/summary.py +66 -0
  40. kimi_cli/background/worker.py +209 -0
  41. kimi_cli/cli/__init__.py +1081 -0
  42. kimi_cli/cli/__main__.py +34 -0
  43. kimi_cli/cli/_lazy_group.py +238 -0
  44. kimi_cli/cli/export.py +322 -0
  45. kimi_cli/cli/info.py +62 -0
  46. kimi_cli/cli/mcp.py +353 -0
  47. kimi_cli/cli/plugin.py +347 -0
  48. kimi_cli/cli/toad.py +73 -0
  49. kimi_cli/cli/vis.py +38 -0
  50. kimi_cli/cli/web.py +80 -0
  51. kimi_cli/config.py +429 -0
  52. kimi_cli/constant.py +116 -0
  53. kimi_cli/exception.py +43 -0
  54. kimi_cli/hooks/__init__.py +24 -0
  55. kimi_cli/hooks/config.py +34 -0
  56. kimi_cli/hooks/defaults/rtk.py +48 -0
  57. kimi_cli/hooks/engine.py +394 -0
  58. kimi_cli/hooks/events.py +190 -0
  59. kimi_cli/hooks/runner.py +103 -0
  60. kimi_cli/llm.py +333 -0
  61. kimi_cli/mcp_oauth.py +72 -0
  62. kimi_cli/metadata.py +79 -0
  63. kimi_cli/notifications/__init__.py +33 -0
  64. kimi_cli/notifications/llm.py +77 -0
  65. kimi_cli/notifications/manager.py +145 -0
  66. kimi_cli/notifications/models.py +50 -0
  67. kimi_cli/notifications/notifier.py +41 -0
  68. kimi_cli/notifications/store.py +118 -0
  69. kimi_cli/notifications/wire.py +21 -0
  70. kimi_cli/plugin/__init__.py +124 -0
  71. kimi_cli/plugin/manager.py +153 -0
  72. kimi_cli/plugin/tool.py +173 -0
  73. kimi_cli/prompts/__init__.py +6 -0
  74. kimi_cli/prompts/compact.md +73 -0
  75. kimi_cli/prompts/init.md +21 -0
  76. kimi_cli/py.typed +0 -0
  77. kimi_cli/session.py +319 -0
  78. kimi_cli/session_fork.py +325 -0
  79. kimi_cli/session_state.py +132 -0
  80. kimi_cli/share.py +14 -0
  81. kimi_cli/skill/__init__.py +727 -0
  82. kimi_cli/skill/flow/__init__.py +99 -0
  83. kimi_cli/skill/flow/d2.py +482 -0
  84. kimi_cli/skill/flow/mermaid.py +266 -0
  85. kimi_cli/skills/kimi-cli-help/SKILL.md +55 -0
  86. kimi_cli/skills/skill-creator/SKILL.md +367 -0
  87. kimi_cli/soul/__init__.py +304 -0
  88. kimi_cli/soul/agent.py +519 -0
  89. kimi_cli/soul/approval.py +267 -0
  90. kimi_cli/soul/btw.py +237 -0
  91. kimi_cli/soul/compaction.py +189 -0
  92. kimi_cli/soul/context.py +339 -0
  93. kimi_cli/soul/denwarenji.py +39 -0
  94. kimi_cli/soul/dynamic_injection.py +84 -0
  95. kimi_cli/soul/dynamic_injections/__init__.py +0 -0
  96. kimi_cli/soul/dynamic_injections/afk_mode.py +74 -0
  97. kimi_cli/soul/dynamic_injections/plan_mode.py +245 -0
  98. kimi_cli/soul/kimisoul.py +1710 -0
  99. kimi_cli/soul/message.py +92 -0
  100. kimi_cli/soul/slash.py +341 -0
  101. kimi_cli/soul/toolset.py +891 -0
  102. kimi_cli/subagents/__init__.py +21 -0
  103. kimi_cli/subagents/builder.py +42 -0
  104. kimi_cli/subagents/core.py +86 -0
  105. kimi_cli/subagents/git_context.py +170 -0
  106. kimi_cli/subagents/models.py +54 -0
  107. kimi_cli/subagents/output.py +71 -0
  108. kimi_cli/subagents/registry.py +28 -0
  109. kimi_cli/subagents/runner.py +428 -0
  110. kimi_cli/subagents/store.py +196 -0
  111. kimi_cli/telemetry/__init__.py +197 -0
  112. kimi_cli/telemetry/crash.py +149 -0
  113. kimi_cli/telemetry/sink.py +143 -0
  114. kimi_cli/telemetry/transport.py +318 -0
  115. kimi_cli/tools/AGENTS.md +5 -0
  116. kimi_cli/tools/__init__.py +105 -0
  117. kimi_cli/tools/agent/__init__.py +277 -0
  118. kimi_cli/tools/agent/description.md +41 -0
  119. kimi_cli/tools/ask_user/__init__.py +154 -0
  120. kimi_cli/tools/ask_user/description.md +19 -0
  121. kimi_cli/tools/background/__init__.py +318 -0
  122. kimi_cli/tools/background/list.md +10 -0
  123. kimi_cli/tools/background/output.md +11 -0
  124. kimi_cli/tools/background/stop.md +8 -0
  125. kimi_cli/tools/display.py +46 -0
  126. kimi_cli/tools/dmail/__init__.py +38 -0
  127. kimi_cli/tools/dmail/dmail.md +17 -0
  128. kimi_cli/tools/file/__init__.py +30 -0
  129. kimi_cli/tools/file/glob.md +21 -0
  130. kimi_cli/tools/file/glob.py +178 -0
  131. kimi_cli/tools/file/grep.md +6 -0
  132. kimi_cli/tools/file/grep_local.py +590 -0
  133. kimi_cli/tools/file/plan_mode.py +45 -0
  134. kimi_cli/tools/file/read.md +16 -0
  135. kimi_cli/tools/file/read.py +300 -0
  136. kimi_cli/tools/file/read_media.md +24 -0
  137. kimi_cli/tools/file/read_media.py +217 -0
  138. kimi_cli/tools/file/replace.md +7 -0
  139. kimi_cli/tools/file/replace.py +195 -0
  140. kimi_cli/tools/file/utils.py +257 -0
  141. kimi_cli/tools/file/write.md +5 -0
  142. kimi_cli/tools/file/write.py +177 -0
  143. kimi_cli/tools/plan/__init__.py +339 -0
  144. kimi_cli/tools/plan/description.md +29 -0
  145. kimi_cli/tools/plan/enter.py +197 -0
  146. kimi_cli/tools/plan/enter_description.md +35 -0
  147. kimi_cli/tools/plan/heroes.py +277 -0
  148. kimi_cli/tools/shell/__init__.py +260 -0
  149. kimi_cli/tools/shell/bash.md +35 -0
  150. kimi_cli/tools/test.py +55 -0
  151. kimi_cli/tools/think/__init__.py +21 -0
  152. kimi_cli/tools/think/think.md +1 -0
  153. kimi_cli/tools/todo/__init__.py +168 -0
  154. kimi_cli/tools/todo/set_todo_list.md +23 -0
  155. kimi_cli/tools/utils.py +199 -0
  156. kimi_cli/tools/web/__init__.py +4 -0
  157. kimi_cli/tools/web/fetch.md +1 -0
  158. kimi_cli/tools/web/fetch.py +189 -0
  159. kimi_cli/tools/web/search.md +1 -0
  160. kimi_cli/tools/web/search.py +163 -0
  161. kimi_cli/ui/__init__.py +0 -0
  162. kimi_cli/ui/acp/__init__.py +99 -0
  163. kimi_cli/ui/print/__init__.py +474 -0
  164. kimi_cli/ui/print/visualize.py +194 -0
  165. kimi_cli/ui/shell/__init__.py +1540 -0
  166. kimi_cli/ui/shell/console.py +109 -0
  167. kimi_cli/ui/shell/debug.py +190 -0
  168. kimi_cli/ui/shell/echo.py +17 -0
  169. kimi_cli/ui/shell/export_import.py +117 -0
  170. kimi_cli/ui/shell/keyboard.py +300 -0
  171. kimi_cli/ui/shell/mcp_status.py +111 -0
  172. kimi_cli/ui/shell/oauth.py +149 -0
  173. kimi_cli/ui/shell/placeholders.py +531 -0
  174. kimi_cli/ui/shell/prompt.py +2259 -0
  175. kimi_cli/ui/shell/replay.py +215 -0
  176. kimi_cli/ui/shell/session_picker.py +227 -0
  177. kimi_cli/ui/shell/setup.py +212 -0
  178. kimi_cli/ui/shell/slash.py +893 -0
  179. kimi_cli/ui/shell/startup.py +32 -0
  180. kimi_cli/ui/shell/task_browser.py +486 -0
  181. kimi_cli/ui/shell/update.py +349 -0
  182. kimi_cli/ui/shell/usage.py +295 -0
  183. kimi_cli/ui/shell/visualize/__init__.py +165 -0
  184. kimi_cli/ui/shell/visualize/_approval_panel.py +505 -0
  185. kimi_cli/ui/shell/visualize/_blocks.py +640 -0
  186. kimi_cli/ui/shell/visualize/_btw_panel.py +224 -0
  187. kimi_cli/ui/shell/visualize/_input_router.py +48 -0
  188. kimi_cli/ui/shell/visualize/_interactive.py +524 -0
  189. kimi_cli/ui/shell/visualize/_live_view.py +902 -0
  190. kimi_cli/ui/shell/visualize/_question_panel.py +586 -0
  191. kimi_cli/ui/theme.py +241 -0
  192. kimi_cli/utils/__init__.py +0 -0
  193. kimi_cli/utils/aiohttp.py +24 -0
  194. kimi_cli/utils/aioqueue.py +72 -0
  195. kimi_cli/utils/broadcast.py +37 -0
  196. kimi_cli/utils/changelog.py +108 -0
  197. kimi_cli/utils/clipboard.py +246 -0
  198. kimi_cli/utils/datetime.py +64 -0
  199. kimi_cli/utils/diff.py +135 -0
  200. kimi_cli/utils/editor.py +91 -0
  201. kimi_cli/utils/environment.py +225 -0
  202. kimi_cli/utils/envvar.py +22 -0
  203. kimi_cli/utils/export.py +696 -0
  204. kimi_cli/utils/file_filter.py +367 -0
  205. kimi_cli/utils/frontmatter.py +70 -0
  206. kimi_cli/utils/io.py +27 -0
  207. kimi_cli/utils/logging.py +124 -0
  208. kimi_cli/utils/media_tags.py +29 -0
  209. kimi_cli/utils/message.py +24 -0
  210. kimi_cli/utils/path.py +245 -0
  211. kimi_cli/utils/proctitle.py +33 -0
  212. kimi_cli/utils/proxy.py +31 -0
  213. kimi_cli/utils/pyinstaller.py +43 -0
  214. kimi_cli/utils/rich/__init__.py +33 -0
  215. kimi_cli/utils/rich/columns.py +99 -0
  216. kimi_cli/utils/rich/diff_render.py +481 -0
  217. kimi_cli/utils/rich/markdown.py +898 -0
  218. kimi_cli/utils/rich/markdown_sample.md +108 -0
  219. kimi_cli/utils/rich/markdown_sample_short.md +2 -0
  220. kimi_cli/utils/rich/syntax.py +114 -0
  221. kimi_cli/utils/sensitive.py +54 -0
  222. kimi_cli/utils/server.py +121 -0
  223. kimi_cli/utils/shell_quoting.py +38 -0
  224. kimi_cli/utils/signals.py +43 -0
  225. kimi_cli/utils/slashcmd.py +145 -0
  226. kimi_cli/utils/string.py +41 -0
  227. kimi_cli/utils/subprocess_env.py +73 -0
  228. kimi_cli/utils/term.py +168 -0
  229. kimi_cli/utils/typing.py +20 -0
  230. kimi_cli/utils/windows_paths.py +48 -0
  231. kimi_cli/vis/__init__.py +0 -0
  232. kimi_cli/vis/api/__init__.py +5 -0
  233. kimi_cli/vis/api/sessions.py +687 -0
  234. kimi_cli/vis/api/statistics.py +209 -0
  235. kimi_cli/vis/api/system.py +19 -0
  236. kimi_cli/vis/app.py +175 -0
  237. kimi_cli/web/__init__.py +5 -0
  238. kimi_cli/web/api/__init__.py +15 -0
  239. kimi_cli/web/api/config.py +208 -0
  240. kimi_cli/web/api/open_in.py +197 -0
  241. kimi_cli/web/api/sessions.py +1223 -0
  242. kimi_cli/web/app.py +451 -0
  243. kimi_cli/web/auth.py +191 -0
  244. kimi_cli/web/models.py +98 -0
  245. kimi_cli/web/runner/__init__.py +5 -0
  246. kimi_cli/web/runner/messages.py +57 -0
  247. kimi_cli/web/runner/process.py +754 -0
  248. kimi_cli/web/runner/worker.py +95 -0
  249. kimi_cli/web/store/__init__.py +1 -0
  250. kimi_cli/web/store/sessions.py +432 -0
  251. kimi_cli/wire/__init__.py +148 -0
  252. kimi_cli/wire/file.py +151 -0
  253. kimi_cli/wire/jsonrpc.py +263 -0
  254. kimi_cli/wire/protocol.py +2 -0
  255. kimi_cli/wire/root_hub.py +27 -0
  256. kimi_cli/wire/serde.py +26 -0
  257. kimi_cli/wire/server.py +1060 -0
  258. kimi_cli/wire/types.py +717 -0
kimi_cli/CHANGELOG.md ADDED
@@ -0,0 +1,1281 @@
1
+ # Changelog
2
+
3
+ <!--
4
+ Release notes will be parsed and available as /release-notes
5
+ The parser extracts for each version:
6
+ - a short description (first paragraph after the version header)
7
+ - bullet entries beginning with "- " under that version (across any subsections)
8
+ Internal builds may append content to the Unreleased section.
9
+ Only write entries that are worth mentioning to users.
10
+ -->
11
+
12
+ ## Unreleased
13
+
14
+ ## 1.46.0 (2026-05-22)
15
+
16
+ - CI: Restore unsigned binary builds in release workflow — removed macOS code signing and notarization steps (no Apple Developer ID certificates configured in this fork) while keeping onefile/onedir binary builds and GitHub Release publishing for all platforms
17
+
18
+ ## 1.45.0 (2026-05-22)
19
+
20
+ - Core: Add default hook support to HookEngine — when `rtk` is installed, a PreToolUse hook is auto-registered to rewrite Shell commands via RTK before execution
21
+ - Core: Allow PreToolUse hooks to modify tool input parameters via `updatedInput` — aggregated rewrites from multiple hooks are applied to the tool call so downstream tools receive the updated arguments
22
+
23
+ ## 1.44.0 (2026-05-13)
24
+
25
+ - Shell: Add slash command alias resolution — aliases such as `/h`, `?`, and `status` now resolve to their canonical commands (`/help`, `/usage`); the completer and help output display alias matches as `/name (alias)` for clarity
26
+ - Shell: Fix `/usage` alias registration — the alias was incorrectly stored as `"/status"` instead of `"status"`, causing alias lookup to fail
27
+
28
+ ## 1.43.0 (2026-05-12)
29
+
30
+ - Security: Bump pillow to 12.2.0 to address CVE-2026-25990 (out-of-bounds write when loading PSD images); unblocks installs in environments that gate on the older pinned version
31
+ - Shell: Fix missing visual spacing in the shell UI — add blank lines after user input echoes, content blocks, tool call results, notifications, error panels, and steer inputs so consecutive elements no longer collapse together
32
+ - Shell: Restore markdown link highlighting (bright blue underlined text and cyan underlined URLs) and add underline separators to h2-h6 headings; adjust table rendering to use square box borders with visible edges
33
+ - Core: Include completion timestamp and elapsed duration in background task terminal notifications, and add `finished_at` and `duration_s` to the notification payload for easier tracking
34
+ - MCP: Stop FastMCP OAuth startup from printing Authlib deprecation warnings by upgrading the MCP client stack to FastMCP 3.2.4
35
+ - MCP: Store OAuth MCP tokens in `~/.kimi/mcp-oauth/` using FastMCP 3's persistent storage API; users with existing OAuth MCP authorizations may need to run `kimi mcp auth <name>` once after upgrading
36
+
37
+ ## 1.42.0 (2026-05-11)
38
+
39
+ - Shell: Switch the Windows shell backend from PowerShell to Git Bash, so the Shell tool now runs commands through `bash.exe` (POSIX semantics) instead of `powershell.exe`. Windows users get the same Unix-style command syntax (`&&`, `||`, `|`, `/dev/null`, `grep`, `sed`, etc.) as Linux/macOS. **Requires Git for Windows installed**: kimi-cli locates `bash.exe` via the `KIMI_CLI_GIT_BASH_PATH` env override → `where.exe git` → standard install paths (`C:\Program Files\Git\bin\bash.exe`); if none resolve, kimi-cli prints an install hint and exits at startup
40
+ - Shell: Defend against hallucinated CMD-style `2>nul` redirects on Windows by rewriting them to `2>/dev/null` before reaching git-bash — without this defense git-bash would create a file literally named `nul` (a Windows reserved device name) that breaks `git add .` and `git clone`; on Linux/macOS, `>nul` is a legitimate redirect to a file named `nul` and is left untouched
41
+ - File: Accept POSIX-form paths on Windows in `ReadFile`, `WriteFile`, `StrReplaceFile`, `Glob`, and `Grep` — these tools now recognize `/c/Users/foo` (Git Bash style), `/cygdrive/c/Users/foo` (Cygwin style), and `\\server\share` (UNC) in addition to native Windows paths, automatically converting to native form for filesystem operations
42
+ - Shell: Clear partial streamed output when an LLM step is retried — previously, if a step failed mid-stream (e.g. rate limit or server error), the incomplete text and unfinished tool-call blocks from the aborted attempt would remain on screen and be mixed with the new attempt's output. The shell UI now discards the partial state and prints a retry banner showing the reason, attempt count, and wait time; print mode also discards buffered assistant messages on retry
43
+ - Wire: Bump protocol version to 1.10 — add `StepRetry` event emitted when a step attempt fails and will be retried, carrying attempt count, wait time, and error details
44
+ - Core: Stop plan-mode and afk-mode workflow prompts from being injected into subagents — subagents share session-level mode state for persistence, but their YAMLs typically exclude root workflow tools such as `EnterPlanMode`, `ExitPlanMode`, and `AskUserQuestion`. These prompt injections are now root-only. Tool-level read-only checks under plan mode are unchanged, so behavior compatibility is preserved
45
+
46
+ ## 1.41.0 (2026-04-30)
47
+
48
+ - Plugin: Support installing plugins directly from a `.zip` URL — `kimi plugin install` now accepts HTTP(S) URLs ending in `.zip` (e.g. GitHub/GitLab archive links like `.../archive/refs/heads/main.zip`) and downloads + extracts them before resolving `plugin.json`, in addition to the existing git URL, local directory, and local zip-file sources
49
+ - Shell: Enable clipboard image paste on headless Linux over SSH — when pyperclip is unavailable (e.g. DISPLAY is not set), Ctrl-V now falls back to xclip or wl-paste so remote clipboard bridges can still inject images; also prevents a UI crash from built-in clipboard shortcuts when pyperclip is broken
50
+
51
+ ## 1.40.0 (2026-04-28)
52
+
53
+ - Core: Fix `--yolo` mode unintentionally preventing the model from calling `AskUserQuestion` — yolo used to inject a system reminder telling the model it was in "non-interactive mode" and must not ask, and the ask-user tool auto-dismissed in yolo. Both were wrong: yolo only bypasses permission approvals; it does not mean "the user is gone". Yolo no longer injects model guidance, and the user remains reachable through `AskUserQuestion`
54
+ - CLI: Split permission bypass from unattended execution — `--yolo` bypasses permission approvals while the user is still at the terminal, while `--afk` / `/afk` means away-from-keyboard: `AskUserQuestion` is auto-dismissed and approvals are handled automatically. `--print` now uses runtime AFK behavior instead of yolo, matching its non-interactive execution model. The status bar shows `yolo` and `afk` independently, and `/yolo` and `/afk` toggle their own flag without disturbing the other
55
+ - Config: Replace `skip_yolo_prompt_injection` with `skip_afk_prompt_injection` now that yolo no longer injects model guidance. The old config key is ignored if present
56
+ - Shell: Fix `/yolo` toggling producing misleading UI messages when afk is also active — `/yolo` used to read the combined auto-approval state, so pressing it under afk would claim approval was now required even though afk still handled approvals automatically. `/yolo` now reads and writes only the yolo flag, leaving afk alone
57
+ - Web: Fix AI title generation overwriting a manually-set title when the LLM call finishes after the user has already renamed the session — the final write now reloads state and yields to a `title_generated` flag set by another request
58
+ - Web: Surface session rename, archive, unarchive, and title generation failures as toast notifications instead of only logging to the console
59
+ - Web: Keep tool media previews visible when tool details are collapsed — images and videos returned by tools now render below the tool card instead of inside the collapsible detail area, so preview thumbnails remain accessible after collapsing a tool
60
+ - Kosong: Fix stale API key after OAuth token refresh in Kimi provider — `on_retryable_error` now reads the current `api_key` from the live client instead of the cached `_api_key`, so that OAuth token refreshes applied via `client.api_key` are preserved when the client is rebuilt after a retryable error
61
+ - Core: Approval requests no longer auto-timeout after 5 minutes, which previously surfaced as `Rejected by user`; active foreground and subagent approvals now wait indefinitely for user response
62
+ - Shell: Fix `/usage` remaining quota rendering — the progress bar, warning colors, and `% left` label now all use the remaining quota ratio consistently, so high remaining quota shows as green/full and near-exhausted quota shows as yellow or red
63
+ - Shell: Show active background agent task count in the prompt status bar — the existing `⚙ bash: N` badge only counted background Shell tasks and filtered out background Agent subagents, so when many subagents were running the prompt looked idle and users could not tell work was in progress; the toolbar now renders `⚙ bash: N` and `⚙ agent: N` as two independent badges (each hidden when its count is 0) and drops the agent badge first when the terminal is too narrow to fit both
64
+ - Auth: Fix managed model list refresh silently failing for OAuth users with expired tokens — the background `/models` sync now detects 401 responses, forces an OAuth token refresh, and retries with the refreshed token; if the refresh fails or the refreshed token is still rejected, it falls back to the originally configured static API key instead of skipping the provider
65
+ - Core: Fix connection recovery not triggering OAuth refresh when the retry returns 401 — after recreating the HTTP client on `APIConnectionError` or `APITimeoutError`, the retry now re-enters the full recovery path so a subsequent 401 correctly refreshes the OAuth token instead of bubbling to the user as an unrecoverable error
66
+ - Shell: Echo `/skill:*` and `/flow:*` inputs in the transcript so workflow commands stay visible after enter; operational slash commands like `/usage` and `/model` remain hidden
67
+ - Core: Raise default `max_steps_per_turn` from 500 to 1000 so long-running agents are less likely to hit the per-turn limit
68
+
69
+ ## 1.39.0 (2026-04-24)
70
+
71
+ - Skill: Fix project-scope skills being ignored and user-scope skills silently winning name conflicts — the system prompt now groups discovered skills under `### Project` / `### User` / `### Extra` / `### Built-in` headings so the model can tell where each skill came from, and when the same name exists in multiple scopes the more specific scope wins (Project > User > Extra > Built-in) so a project's own `.kimi/skills/foo` or `.claude/skills/foo` correctly overrides a user-level or bundled `foo` instead of the other way around
72
+ - Skill: Accept single-file `<name>.md` skills alongside the canonical `<name>/SKILL.md` subdirectory layout — useful when migrating a flat markdown collection into a skills directory; `name` defaults to the filename stem (frontmatter `name:` still wins if set), description follows the same three-step chain as subdirectory skills (frontmatter `description:` → first non-empty body line, capped at 240 characters → `"No description provided."` placeholder), and if a flat and a subdirectory skill share a name in the same directory the subdirectory wins with a warning
73
+ - Skill: Add `extra_skill_dirs` config field for pulling in custom skill directories on top of the built-in / user / project auto-discovery — each entry may be an absolute path, a `~`-prefixed path (expanded against `$HOME`), or a path relative to the project root (the nearest `.git` ancestor of the work directory, not the current working directory); non-existent entries are silently skipped and symlink/trailing-slash duplicates canonicalize to a single root so a path listed twice or aliased to an already-discovered directory does not render twice in the system prompt
74
+ - Skill: Harden discovery against `OSError` from `is_dir` / `iterdir` (for example when an `extra_skill_dirs` entry points at a directory with restricted permissions) — affected entries are logged and skipped instead of aborting the whole skill-discovery pass
75
+ - Core: Fix DeepSeek V4 (and other OpenAI-compatible thinking-mode backends) returning 400 `The reasoning_content in the thinking mode must be passed back to the API` when a tool call follows a reasoning turn — `openai_legacy` providers now default `reasoning_key` to `"reasoning_content"` so the response's reasoning is stored in history and round-tripped automatically on subsequent turns. An optional `reasoning_key` field is also added to `LLMProvider` to override the field name (e.g. `"reasoning"` for non-standard gateways) or disable round-tripping entirely by setting it to `""`
76
+ - Core: Add `skip_yolo_prompt_injection` config option to suppress the system reminder normally injected when yolo mode is active — useful when building custom applications on top of `KimiSoul` that do not need the non-interactive mode hint
77
+ - Kimi: Add `KIMI_MODEL_THINKING_KEEP` environment variable that forwards its value verbatim to the Moonshot API as `thinking.keep`, enabling Preserved Thinking (e.g. `export KIMI_MODEL_THINKING_KEEP=all` to retain historical `reasoning_content` across turns); effective only for Moonshot models supporting Preserved Thinking (e.g. `kimi-k2.6` / `kimi-k2-thinking`), unset or empty string preserves the previous behavior and omits the field, and the override only applies when the current model is actually in thinking mode so the API never receives a `thinking.keep` without the companion `thinking.type`. Note that `keep=all` increases input tokens and API cost because history reasoning is resent
78
+ - Kosong: Fix `Kimi.with_extra_body` silently dropping previously set `thinking.type` when a later call added another `thinking.*` field — the `thinking` sub-dict is now merged field-by-field instead of shallow-replaced, so composing `with_thinking(...)` with `with_extra_body({"thinking": {...}})` preserves both contributions
79
+ - Kosong: Fix Kimi provider sending empty `content` alongside `tool_calls`, which caused 400 "text content is empty" errors from the Moonshot API. When an assistant message has tool calls and its visible content is effectively empty (no text or only whitespace/think parts), the `content` field is now omitted entirely
80
+ - Shell: Fix approval request feedback text cursor rendering — the block cursor now correctly renders at the actual cursor position instead of always being pinned to the end of the line; when the cursor is in the middle of the text, the character under the cursor is drawn with reverse video (mimicking a terminal's native block cursor)
81
+ - Kosong: Fix Moonshot 400 `At path 'properties.X': type is not defined` when an MCP server exposes tools whose parameter schemas have enum-only or otherwise type-less properties (seen with the JetBrains Rider MCP's `truncateMode`) — the Kimi provider now patches each tool's schema in-flight to fill in a JSON Schema `type` (inferred from `enum`/`const` values when possible, else defaulted to `"string"`), so the whole session no longer fails every request with a schema validation error; OpenAI and Anthropic paths are unaffected
82
+ - Skill: Project-scope skill discovery now walks up to the nearest `.git` ancestor before looking for `.kimi/skills` / `.claude/skills` / `.codex/skills` / `.agents/skills`, so skills defined at the repository root are picked up even when kimi-cli is launched from a subdirectory (for example inside a monorepo package). Falls back to the work directory itself when no `.git` marker is found, so we never walk up into an unrelated parent tree.
83
+ - Skill: Change the default of `merge_all_available_skills` from `false` to `true`. kimi-cli now merges all existing user- and project-level brand skill directories (`.kimi/skills`, `.claude/skills`, `.codex/skills`) by default instead of only using the first one found, so users who keep skills in multiple brand directories — for example both `~/.kimi/skills` and `~/.claude/skills` — see every skill out of the box. **Behavior change**: users who previously relied on the first-match default can restore it by setting `merge_all_available_skills = false` in their config.
84
+
85
+ ## 1.38.0 (2026-04-22)
86
+ - Shell: Fix `Rejected by user` misleading message when an approval modal times out — after the 300s safety timeout, the tool call now rejects with `Rejected: approval timed out`, so users returning to their session after stepping away can tell the rejection was a timeout rather than a manual rejection. Pass `--yolo`/`-y` to auto-approve tool calls if you regularly leave sessions unattended
87
+ - Auth: Fix OAuth users being forced to `/login` again after an unrelated refresh-token rotation race — when a concurrently-running kimi-cli instance (terminal, VS Code extension, or `kimi -p` one-shot) legitimately rotated the refresh token, the current instance's now-stale refresh request would come back with a 401, and a TOCTOU window between the "did another instance rotate?" disk check and the `delete_tokens` call could wipe the credentials file even though a valid rotated token was about to be written to it; the in-memory cache is still cleared so truly revoked tokens surface on the next request, but the file is preserved so a concurrent instance's freshly-rotated token can be recovered, and an eventual `/login` still overwrites it atomically
88
+ - Kosong: Fix parallel tool results being split into multiple user messages in Anthropic provider — consecutive tool-result-only user messages are now merged into a single message, complying with the Anthropic Messages API spec that all `tool_use` blocks in an assistant turn must be answered within one user message; this fixes 400 errors on strict Anthropic-compatible backends (e.g. DeepSeek `/anthropic` endpoint) and prevents the official backend from silently teaching the model to avoid parallel tool calls
89
+
90
+ ## 1.37.0 (2026-04-20)
91
+
92
+ - Print: Wait for background tasks before exiting — in one-shot `--print` mode, the process now waits for running background agents to finish and lets the model process their results, instead of exiting and killing them. The wait is capped at `min(max(active_task.timeout_s or agent_task_timeout_s), print_wait_ceiling_s)` (default ceiling 1h); on timeout the tasks are killed and the model gets one more turn via a `<system-reminder>` to summarise before exit
93
+ - Shell/Print: On exit the CLI now lists each background task being killed (id + description) on stderr and waits out the configured grace period before reporting any tasks that have not reached terminal state (split into "still terminating" for workers mid-shutdown vs "stop request failed" for genuinely leaking tasks); `keep_alive_on_exit=true` still skips the entire path
94
+ - Auth: Auto-refresh the managed model list at startup for OAuth-logged-in users — the CLI now fetches the latest models from the provider's `/models` endpoint as a background task when the shell launches, so newly released models become available without needing to log out and log back in; failures are silent and never block startup, and custom `--config` sessions keep their previous behavior
95
+ - Shell: Show the provider-supplied `display_name` (e.g. `k2.6-code-preview`) for managed models across the welcome panel, prompt status bar, `/model` picker, and `/model` switch confirmation messages; when the backend does not return one, the CLI falls back to the internal model ID as before
96
+
97
+ ## 1.36.0 (2026-04-17)
98
+
99
+ - Anthropic: Fix Claude Opus 4.7 returning `invalid_request_error` — Opus 4.7 (which rejects the legacy `{type: "enabled", budget_tokens: N}` thinking config) now correctly uses adaptive thinking, and the client explicitly sets `display: "summarized"` so thinking content still streams back (Opus 4.7 silently changed the default to `"omitted"`); Bedrock/Vertex name variants (e.g., `aws/claude-opus-4-7`, `anthropic.claude-opus-4-7-v1:0`) and `claude-mythos-preview` are also recognised, and future Claude versions ≥ 4.6 are detected automatically via version extrapolation instead of hard-coded substring matching
100
+ - Web: Fix markdown rendering spacing in the web UI — restore proper vertical spacing between paragraphs, lists, code blocks, blockquotes, and headings instead of collapsing all margins to zero
101
+ - Shell: Fix missing loading indicator during active turns — the moon spinner now shows as a fallback whenever the model is working but no other indicator is visible, covering gaps after tool calls finish, between turn start and first step, and when an empty thinking block arrives from the provider
102
+ - Core: Increase default `max_steps_per_turn` from 100 to 500 to allow longer uninterrupted agent runs out of the box
103
+ - Web: Fix unresponsive copy, download, and preview buttons on rendered code blocks
104
+
105
+ ## 1.35.0 (2026-04-15)
106
+
107
+ - Shell: Flip `show_thinking_stream` default to `true` so fresh installs see the streaming reasoning preview out of the box; set it to `false` in your config to keep the compact 1.32 indicator
108
+ - Web: Prevent stream watchdog from reconnecting during pending approval or question — the 45-second inactivity watchdog no longer triggers a reconnect while the user is actively handling an approval request or answering a question, preventing interrupted interactions
109
+ - Web: Fix session recovery after stream errors — when a session process exits or hits a read-loop error, stale in-flight prompt IDs are now cleared before broadcasting the error, allowing the frontend to send new messages instead of getting "Session is busy"; the activity status indicator also surfaces the actual error message from the stream
110
+ - Core: Fix Wire server prompt handler leaving sessions stuck busy on uncaught exceptions — SSL errors, connection errors, and other unexpected failures are now caught by a fallback handler and returned as `INTERNAL_ERROR`, allowing the session to recover instead of hanging indefinitely
111
+
112
+ ## 1.34.0 (2026-04-14)
113
+
114
+ - Core: Fix CLI crash on `TaskStop` — stopping a stuck background agent no longer prints `Unhandled exception in event loop / Exception None` and freezes the terminal; the cancelled task is now kept in the manager's live-tasks dict until its runner finishes cleaning up, preventing Python's GC from reaping the still-pending task
115
+ - Shell: Fix inline diff highlights misaligned on lines containing tabs — raw-code diff offsets are now mapped to rendered positions via expandtabs column tracking so highlight spans land correctly after tab expansion
116
+ - Shell: Add `show_thinking_stream` config option to opt back into the legacy streaming reasoning preview — when set to `true`, the live area shows the classic `Thinking...` spinner above a 6-line scrolling preview of the raw reasoning text and the full reasoning markdown is committed to history when the block ends; defaults to `false` to keep the compact 1.32 indicator
117
+
118
+ ## 1.33.0 (2026-04-13)
119
+
120
+ - Shell: Unify managed model display as "Kimi for Code" and drop hardcoded `kimi-k2.5` version references from the welcome screen and `/login` tip
121
+
122
+ ## 1.32.0 (2026-04-13)
123
+
124
+ - Core: Truncate MCP tool output to 100K characters to prevent context overflow — all content types (text and inline media such as image/audio/video data URLs) share a single character budget; tools like Playwright that return full DOMs (500KB+) or large base64 screenshots are now capped with a truncation notice; oversized media parts are dropped; unsupported MCP content types are gracefully handled instead of crashing the turn
125
+ - CLI: Fix PyInstaller binary missing lazy CLI subcommands — `kimi info`, `kimi export`, `kimi mcp`, `kimi plugin`, `kimi vis`, and `kimi web` now work correctly in the standalone binary distribution
126
+ - Shell: Streamline the thinking indicator into a compact single-line layout — shows a `Thinking` label with animated dots, elapsed time, token count, and a live tokens/second pulse; finalises with a `Thought for Xs · N tokens` trace in history
127
+
128
+ ## 1.31.0 (2026-04-10)
129
+
130
+ - Core: Cap `list_directory` output as a depth-limited tree to prevent token-limit blowup in large directories — replaces the unbounded flat listing with a 2-level tree (root: 30 entries, child: 10 per subdirectory), dirs-first alphabetical sorting, and `"... and N more"` truncation hints so the model knows to explore further (fixes #1809)
131
+ - Shell: Add blocking update gate on interactive shell startup — when a newer version is detected (from the existing background check cache), a blocking prompt appears before the shell loads, offering `[Enter]` to upgrade immediately, `[q]` to continue and be reminded next time, or `[s]` to skip reminders for that version; respects the `KIMI_CLI_NO_AUTO_UPDATE` environment variable; replaces the previous repeating toast notification for available updates
132
+ - Auth: Harden OAuth token refresh to prevent unnecessary re-login — 401 errors now trigger automatic token refresh and retry instead of forcing `/login`; multiple simultaneous CLI instances coordinate refresh via a cross-process file lock to avoid race conditions; token persistence uses atomic writes with `fsync` to prevent corruption; adds dynamic refresh threshold, 5xx retry during token refresh, and proper token revocation cleanup
133
+ - Core: Fix agent loop silently stopping when model response contains only thinking content — detect think-only responses (reasoning content with no text or tool calls) as an incomplete response error and retry automatically
134
+ - Core: Fix crash on streaming mid-flight network disconnection — when the OpenAI SDK raises a base `APIError` (instead of `APIConnectionError`) during long-running streams, the error is now correctly classified as retryable, enabling automatic retry and connection recovery instead of an unrecoverable crash
135
+ - Shell: Exclude empty current session from `/sessions` picker — completely empty sessions (no conversation history and no custom title) are no longer shown in the session list; sessions with a custom title are still displayed
136
+ - Shell: Fix slash command completion Enter key behavior — accepting a completion now submits in a single Enter press; auto-submit is limited to slash command completions only; file mention completions (`@`) accept without submitting so the user can continue editing; re-completion after accepting is suppressed to prevent stale completion state
137
+ - Shell: Add directory scope toggle to `/sessions` picker — press `Ctrl+A` to switch between showing sessions for the current working directory only or across all known directories; uses a new full-screen session picker UI with header scope indicator and footer hint bar
138
+ - Shell: Add `/btw` side question command — ask a quick question during streaming without interrupting the main conversation; uses the same system prompt and tool definitions for prompt cache alignment; responses display in a scrollable modal panel with streaming support
139
+ - Shell: Redesign bottom dynamic area — split the monolithic `visualize.py` (1865 lines) into a modular package (`visualize/`) with dedicated modules for input routing, interactive prompts, approval/question panels, and btw modal; unify input semantics with `classify_input()` for consistent command routing
140
+ - Shell: Add queue and steer dual-channel input during streaming — Enter queues messages for delivery after the current turn; Ctrl+S injects messages immediately into the running turn's context; queued messages display in the prompt area with count indicator and can be recalled with ↑
141
+ - Shell: Add `BtwBegin`/`BtwEnd` wire events for cross-client side question support
142
+ - Shell: Improve elapsed time formatting in spinners — durations over 60 seconds now display as `"1m 23s"` instead of `"83s"`; sub-second durations show `"<1s"`
143
+ - Shell: Fix Rich markup injection in btw panel — user questions containing `[`/`]` characters are now escaped to prevent broken rendering or style injection in spinner text and panel titles
144
+ - Core: Improve error diagnostics — enrich internal logging coverage, include relevant log files and system manifest in `kimi export` archives, and surface actionable error messages for common failures (auth, network, timeout, quota)
145
+ - Shell: Gracefully exit with crash report when working directory becomes inaccessible during session — detects CWD loss (external drive unplugged, directory deleted, or filesystem unmounted) and prints a session recovery panel with session ID and work directory before exiting cleanly
146
+ - Shell: Use `git ls-files` for `@` file mention discovery — file completer now queries `git ls-files --recurse-submodules` with a 5-second timeout as the primary discovery mechanism, falling back to `os.walk` for non-git repositories; this fixes large repositories (e.g., apache/superset with 65k+ files) where the 1000-file limit caused late-alphabetical directories to be unreachable (fixes #1375)
147
+ - Core: Add shared `file_filter` module — unifies file mention logic between shell and web UIs via `src/kimi_cli/utils/file_filter.py`, providing consistent path filtering, ignored directory exclusion, and git-aware file discovery
148
+ - Shell: Prevent path traversal in file mention scope parameter — the `scope` parameter in file completer requests is now validated to prevent directory traversal attacks
149
+ - Web: Restore unfiltered directory listing in file browser API — file browser endpoint no longer applies git-aware filtering, ensuring all files are visible in the web UI file picker
150
+ - Todo: Refactor SetTodoList to persist state and prevent tool call storms — todos are now persisted to session state (root agent) and independent state files (sub-agents); adds query mode (omit `todos` to read current state) and clear mode (pass `[]`); includes anti-storm guidance in tool description to prevent repeated calls without progress (fixes #1710)
151
+ - ReadFile: Add total line count to every read response and support negative `line_offset` for tail mode — the tool now reports `Total lines in file: N.` in its message so the model can plan subsequent reads; negative `line_offset` (e.g. `-100`) reads the last N lines using a sliding window, useful for viewing recent log output without shell commands; the absolute value is capped at 1000 (MAX_LINES)
152
+ - Shell: Fix black background on inline code and code blocks in Markdown rendering — `NEUTRAL_MARKDOWN_THEME` now overrides all Rich default `markdown.*` styles to `"none"`, preventing Rich's built-in `"cyan on black"` from leaking through on non-black terminals
153
+
154
+ ## 1.30.0 (2026-04-02)
155
+
156
+ - Shell: Refine idle background completion auto-trigger — resumed shell sessions no longer auto-start a foreground turn from stale pending background notifications before the user sends a message, and fresh background completions now wait briefly while the user is actively typing to avoid stealing the prompt or breaking CJK IME composition
157
+ - Core: Fix interrupted foreground turns leaving unbalanced wire events — `TurnEnd` is now emitted even when a turn exits via cancellation or step interruption, preventing dirty session wire logs from accumulating across resume cycles
158
+ - Core: Improve session startup resilience — `--continue`/`--resume` now tolerate malformed `context.jsonl` records and corrupted subagent, background-task, or notification artifacts; the CLI skips invalid persisted state where possible instead of failing to restore the session
159
+ - CLI: Improve `kimi export` session export UX — `kimi export` now previews the previous session for the current working directory and asks for confirmation, showing the session ID, title, and last user-message time; adds `--yes` to skip confirmation; also fixes explicit session-ID invocations where `--output` after the argument was incorrectly parsed as a subcommand
160
+ - Grep: Add `include_ignored` parameter to search files excluded by `.gitignore` — when set to `true`, ripgrep's `--no-ignore` flag is enabled, allowing searches in gitignored artifacts such as build outputs or `node_modules`; sensitive files (like `.env`) remain filtered by the sensitive-file protection layer; defaults to `false` to preserve existing behavior
161
+ - Core: Add sensitive file protection to Grep and Read tools — `.env`, SSH private keys (`id_rsa`, `id_ed25519`, `id_ecdsa`), and cloud credentials (`.aws/credentials`, `.gcp/credentials`) are now detected and blocked; Grep filters them from results with a warning, Read rejects them outright; `.env.example`/`.env.sample`/`.env.template` are exempted
162
+ - Core: Fix parallel foreground subagent approval requests hanging the session — in interactive shell mode, `_set_active_approval_sink` no longer flushes pending approval requests to the live view sink (which cannot render approval modals); requests stay in the pending queue for the prompt modal path; also adds a 300-second timeout to `wait_for_response` so that any unresolved approval request eventually raises `ApprovalCancelledError` instead of hanging forever
163
+ - CLI: Add `--session`/`--resume` (`-S`/`-r`) flag to resume sessions — without an argument opens an interactive session picker (shell UI only); with a session ID resumes that specific session; replaces the reverted `--pick-session`/`--list-sessions` design with a unified optional-value flag
164
+ - CLI: Add CJK-safe `shorten()` utility — replaces all `textwrap.shorten` calls so that CJK text without spaces is truncated gracefully instead of collapsing to just the placeholder
165
+ - Core: Fix skills in brand directories (e.g. `~/.kimi/skills/`) silently disappearing when a generic directory (`~/.config/agents/skills/`) exists but is empty — skill directory discovery now searches brand and generic directory groups independently and merges both results, instead of stopping at the first existing directory across all candidates
166
+ - Core: Add `merge_all_available_skills` config option — when enabled, skills from all existing brand directories (`~/.kimi/skills/`, `~/.claude/skills/`, `~/.codex/skills/`) are loaded and merged instead of using only the first one found; same-name skills follow priority order kimi > claude > codex; disabled by default
167
+ - CLI: Add `--plan` flag and `default_plan_mode` config option — start new sessions in plan mode via `kimi --plan` or by setting `default_plan_mode = true` in `~/.kimi/config.toml`; resumed sessions preserve their existing plan mode state
168
+ - Shell: Add `/undo` and `/fork` commands for session forking — `/undo` lets you pick a previous turn and fork a new session with the selected message pre-filled for re-editing; `/fork` duplicates the entire session history into a new session; the original session is always preserved
169
+ - CLI: Add `-r` as a short alias for `--session` and print a resume hint (`kimi -r <session-id>`) whenever a session exits — covers normal exit, Ctrl-C, `/undo`, `/fork`, and `/sessions` switch so users can always find their way back
170
+ - Core: Fix `custom_headers` not being passed to non-Kimi providers — OpenAI, Anthropic, Google GenAI, and Vertex AI providers now correctly forward custom headers configured in `providers.*.custom_headers`
171
+
172
+ ## 1.29.0 (2026-04-01)
173
+
174
+ - Core: Support hierarchical `AGENTS.md` loading — the CLI now discovers and merges `AGENTS.md` files from the git project root down to the working directory, including `.kimi/AGENTS.md` at each level; deeper files take priority under a 32 KiB budget cap, ensuring the most specific instructions are never truncated
175
+ - Core: Fix empty sessions lingering on disk after exit — sessions created but never used are now cleaned up on all exit paths (failure exit, session switch, unexpected errors), not just on successful exit
176
+ - Shell: Add `KIMI_CLI_PASTE_CHAR_THRESHOLD` and `KIMI_CLI_PASTE_LINE_THRESHOLD` environment variables to control when pasted text is folded into a placeholder — lowering these thresholds works around CJK input method breakage after multiline paste on some terminals (e.g., XShell over SSH)
177
+ - Shell: Fix diff panel rendering corruption on terminals without truecolor support (e.g. Xshell) — `render_to_ansi` no longer hardcodes 24-bit color; Rich now auto-detects terminal capability via `COLORTERM`/`TERM` environment variables
178
+ - Web: Fix white screen after CLI upgrade caused by browser caching stale `index.html` — the server now returns `Cache-Control: no-cache` for HTML and `immutable` for hashed assets, preventing 404s on renamed chunks
179
+ - Core: Fix file write converting LF to CRLF on Windows — `writetext` now opens files with `newline=""` to prevent Python's universal newline translation from silently converting `\n` to `\r\n`
180
+ - Core: Support `socks://` proxy scheme — proxy tools like V2RayN set `ALL_PROXY=socks://...` which httpx/aiohttp don't recognise; the CLI now normalises `socks://` to `socks5://` at startup so all HTTP clients and subprocesses work correctly behind a SOCKS proxy
181
+ - Shell: Add `/title` (alias `/rename`) command to manually set session titles — titles are now stored in `state.json` alongside other session state; legacy `metadata.json` is automatically migrated on first load
182
+ - Shell: Fix garbled pager output when `MANPAGER` is set (e.g. `bat`) — the console pager now ignores `MANPAGER` and delegates to `pydoc.pager()`, preserving `PAGER` and all platform-specific fallbacks
183
+ - Explore: Enhance explore agent with specialist role, thoroughness levels, and automatic environment context — explore agents now gather repository environment information at launch to improve investigation quality; the main agent is guided to prefer explore for codebase research and plan mode encourages explore-first investigation
184
+ - Shell: Fix tool call display showing raw OSC 8 escape bytes (e.g. `8;id=391551;https://…`) instead of clean text — hyperlink sequences are now wrapped as zero-width escapes for prompt_toolkit compatibility, preserving clickable links in supported terminals
185
+ - Core: Add OS and shell information to the system prompt — the model now knows which platform it is running on and receives a Windows-specific instruction to prefer built-in tools over Shell commands, preventing Linux command errors in PowerShell
186
+ - Shell: Fix `command` parameter description saying "bash command" regardless of platform — the description is now platform-neutral
187
+ - Web: Fix auto-title overwriting manual session rename — when a user renames a session through the web UI, the new title is now preserved and no longer replaced by the auto-generated title
188
+ ## 1.28.0 (2026-03-30)
189
+
190
+ - Core: Fix file write/replace tools freezing the event loop — diff computation (`build_diff_blocks`) is now offloaded to a thread via `asyncio.to_thread`, preventing the UI from hanging when editing large files
191
+ - Shell: Fix `_watch_root_wire_hub` silently dying on handler exceptions — the watcher now catches and logs exceptions (matching the pattern in `wire/server.py`) and handles `QueueShutDown` gracefully, preventing approval flow from silently breaking mid-session
192
+ - Core: Skip O(n²) diff computation for huge files (>10 000 lines) — files above the threshold now show a summary block instead of computing a full diff, and unchanged files short-circuit immediately
193
+ - Wire: Add `is_summary` field to `DiffDisplayBlock` (Wire 1.8) — marks diff blocks that contain a line-count summary instead of actual diff content, allowing clients to render them appropriately
194
+ - Web: Render large-file diff summaries — when a diff block is marked `is_summary`, the web UI shows a compact "File too large for inline diff" notice with line counts instead of attempting to compute a diff
195
+ - Auth: Fix OAuth users getting "incorrect API KEY" when running skills or after idle — 401 errors now show a clear "please /login" message instead of the raw API error; the ACP layer correctly triggers re-login flow for VS Code extension users
196
+ - Web: Fix session title generation always failing for OAuth users — the title generator now uses OAuth tokens and refreshes them before calling the model
197
+ - Core: Add timeout protection for Agent tool and HTTP requests — all `aiohttp` sessions now default to 120 s total / 60 s read timeout; the Agent tool gains an optional `timeout` parameter (foreground default 10 min, background default 15 min); background agent tasks are marked `timed_out` on expiry with proper notification semantics
198
+ - Grep: Fix tool hanging and becoming uninterruptible — replaced blocking `ripgrepy.run()` with async subprocess execution; the tool now responds to Ctrl-C immediately and has a 20-second timeout with partial result return
199
+ - Grep: Add token efficiency improvements — default `head_limit` of 250 with `offset` pagination, `--hidden` search with VCS directory exclusion, `files_with_matches` sorted by modification time, relative path output, and `--max-columns 500` for non-content modes
200
+ - Grep: `line_number` (`-n`) now defaults to `true` in content mode — line numbers are included by default so the model can reference precise code locations
201
+ - Grep: `count_matches` mode now includes a summary in the message — e.g. "Found 30 total occurrences across 10 files."
202
+ - ACP: Fix `ValueError: list.index(x): x not in list` crash when ACP is launched via `kimi-code` or `kimi-cli` entry-points (e.g. JetBrains AI Assistant)
203
+ - Core: Fix OpenAI-compatible APIs (e.g. One API) returning 400 errors in multi-turn conversations when the server returns `reasoning_content` by default — `reasoning_effort` is now auto-set to `"medium"` when history contains thinking content and `reasoning_key` is configured
204
+ - Shell: Add `/theme` command and dark/light theme support — users with light terminal backgrounds can now switch to a light color palette via `/theme light` or `theme = "light"` in `config.toml`; diff highlights, task browser, prompt UI, and MCP status colors all adapt to the selected theme
205
+ - Core: Fix context overflow before compaction — tool result tokens are now estimated and included in the auto-compaction trigger check, preventing "exceeded model token limit" errors when large tool outputs push the context beyond the model limit between API calls
206
+ - Core: Add hooks system (Beta) — configure `[[hooks]]` in `config.toml` to run custom shell commands at 13 lifecycle events including `PreToolUse`, `PostToolUse`, `SessionStart`, `Stop`, etc.; supports regex matching, timeout handling, and blocking operations via exit code 2
207
+ - Shell: Add `/hooks` command — list all configured hooks with event counts
208
+ - Wire: Add `HookTriggered` and `HookResolved` event types (Wire 1.7) — notify clients when hooks start and finish executing, including event type, target, action (allow/block), and duration
209
+ - Wire: Add `HookRequest` and `HookResponse` message types — allow wire clients to subscribe to hook events and provide their own handling logic with allow/block decisions
210
+ - CLI: `--skills-dir` now supports multiple directories and overrides default discovery — when specified, the directories replace user/project skills discovery (repeatable flag)
211
+ - Shell: Fix notification messages leaking into session replay and export — background task notification tags (`<notification>`, `<task-notification>`) are now filtered out when resuming a session (`/sessions`) and when exporting (`/export`) or importing (`/import`) conversation history
212
+ - Web: The "Open" button in the workspace header now remembers the last-used application — clicking "Open" directly opens with the previous choice, while the dropdown arrow lets you pick a different app
213
+ - Web: Fix archived sessions count badge showing only the loaded page size — the badge now displays "100+" when more archived sessions exist beyond the first page
214
+ - Shell: Fix pasted text placeholders not expanded in modal answers — clipboard content pasted into approval or question panels is now correctly interpolated before being sent to the model
215
+ - Vis: Add `--network / -n` flag — launch the visualizer on all network interfaces with auto-detected LAN IP display, matching `kimi web` behavior
216
+ - Vis: Add `/vis` slash command — switch from the interactive shell to the tracing visualizer in one step, mirroring the existing `/web` command
217
+ - Vis: Improve session list performance — async backend scanning, request concurrency limiting, and infinite-scroll pagination prevent browser freezes on large session stores
218
+ - Vis: Add 7 missing wire event types — `SteerInput`, `MCPLoadingBegin/End`, `Notification`, `PlanDisplay`, `ToolCallRequest`, and `QuestionRequest` now display with proper colors and summaries
219
+ - Vis: Show token and cache details in StatusUpdate — each status update now displays context token count, max tokens, input token breakdown with cache hit rate, and MCP connection status
220
+ - Vis: Show structured tool call summaries — `ReadFile`, `Shell`, `Glob`, `Grep`, `Agent`, and other tool calls display file paths, commands, or patterns inline instead of just the function name
221
+ - Vis: Add System Prompt card in Context Messages — the `_system_prompt` entry is rendered as a dedicated blue card showing estimated token count and expandable full content
222
+ - Vis: Show cache hit rate in session header — the stats bar now displays overall cache efficiency (e.g., `89% cache`) alongside token counts
223
+ - Vis: Highlight slow operations — time deltas exceeding 10 s appear in amber and those exceeding 60 s in red, making performance bottlenecks immediately visible
224
+ - Vis: Prefer human-readable `message` field in ToolResult summaries — results now show descriptive text like "Command executed successfully" instead of raw output
225
+ - Vis: Show approval rejection feedback — `ApprovalResponse` summaries include the user's correction text when a tool call is rejected
226
+
227
+ ## 1.27.0 (2026-03-28)
228
+
229
+ - Shell: Add `/feedback` command — submit feedback directly from the CLI session; the command falls back to opening GitHub Issues on network errors or timeouts
230
+ - Shell: Redesign diff rendering for tool results — file diffs now display with line numbers, background colors (green/red), syntax highlighting, and inline word-level change markers; approval previews show only changed lines for a compact view; Ctrl-E pager uses the same unified style
231
+ - Shell: Update syntax highlighting theme — replace the magenta-heavy color scheme with a more balanced palette mapped to ANSI colors for terminal compatibility; improved color diversity and readability across dark and light terminal backgrounds
232
+ - Shell: Fix approval panel not visible when multiple subagents are running — approval and question panels are now rendered at the top of the live view, ensuring they remain visible even when tool-call output exceeds the terminal height
233
+ - CLI: Fix `--print` mode returning exit code 0 on errors — print mode now exits with code 1 for permanent failures (auth errors, invalid config, etc.) and code 75 for retryable failures (429 rate limit, 5xx server errors, connection timeouts), enabling CI/eval runners to detect failures and decide whether to retry
234
+ - Plan: Display plan content inline in the chat instead of hiding behind a pager — plans are now rendered as a bordered panel directly in the conversation history, with the plan file path shown for reference
235
+ - Plan: Add "Reject and Exit" option to plan approval — users can now reject a plan and exit plan mode in one step, in addition to the existing Approve, Revise, and Reject options
236
+ - Wire: Add `PlanDisplay` event type (Wire 1.7) — carries plan content and file path for inline rendering by clients
237
+ - Shell: Stream markdown output incrementally — completed markdown blocks (paragraphs, lists, code fences, tables) are now rendered and printed to the terminal as they arrive during streaming, instead of being buffered until the turn ends
238
+ - Shell: Show elapsed time and estimated token count on thinking/composing spinners — the spinner now displays `Thinking... 5s · 312 tokens` with a live-updating counter during generation
239
+ - Shell: Add scrolling preview for thinking content — the last 6 lines of the model's thinking process are shown in real time as a grey italic preview beneath the spinner
240
+ - Shell: Reduce prompt input area reserved space from 10 to 6 lines
241
+ - Glob: Allow `Glob` tool to access skills directories — the tool can now search within discovered skill roots in addition to the workspace
242
+ - Glob: Expand `~` in directory path before validation — the Glob tool now resolves the tilde to the user's home directory before checking path validity
243
+
244
+ ## 1.26.0 (2026-03-25)
245
+
246
+ - Kosong: Fix Google GenAI provider sending `id` in `FunctionCall`/`FunctionResponse` parts — Gemini API returns HTTP 400 when `id` is included; remove the field from wire format while keeping internal `tool_call_id` tracking unchanged
247
+ - Core: Fix MCP server stderr pollution — stderr redirection is now installed before MCP servers start, so subprocess logs (e.g., OAuth debug output from `mcp-remote`) are captured into the log file instead of being printed to the terminal
248
+ - Shell: Fix subprocess hang on interactive prompts — the `Shell` tool now closes stdin immediately and sets `GIT_TERMINAL_PROMPT=0` so commands that require credentials (e.g. `git push` over HTTPS) fail fast instead of blocking until timeout
249
+ - Core: Fix JSON parsing error when LLM tool call arguments contain unescaped control characters — use `json.loads(strict=False)` across all LLM output parsing paths to prevent tool execution failure and session corruption
250
+ - Shell: Auto-trigger agent when background tasks complete while idle — the shell now detects when a background bash command or agent task finishes and automatically starts a new agent turn to process the results, instead of waiting for the user to type something
251
+ - Core: Fix `QuestionRequest` hanging in print mode — `AskUserQuestion`, `EnterPlanMode`, and `ExitPlanMode` now auto-resolve when running in non-interactive (yolo) mode, preventing indefinite tool call hangs in `--print` sessions
252
+ - Core: Fix background agent task output not visible until completion — `/task` browser and `TaskOutput` tool now show real-time output while background agent tasks are running, by tee-writing to the task log during execution instead of copying on completion
253
+ - Core: Strengthen system prompt to encourage tool use for coding tasks — the agent now defaults to taking action with tools instead of outputting code as plain text
254
+ - Core: Retry `httpx.ProtocolError` and `504 Gateway Timeout` during generation — streaming protocol disconnects and transient 504 responses now follow the existing retry path instead of aborting the turn immediately on unstable networks
255
+ - Kosong: Fix `httpx.ReadTimeout` leaking through Anthropic provider during streaming — the exception now correctly converts to `APITimeoutError`, enabling retry logic that was previously bypassed
256
+
257
+ ## 1.25.0 (2026-03-23)
258
+
259
+ - Core: Add plugin system (Skills + Tools) — plugins extend Kimi Code CLI with custom tools packaged as `plugin.json`; tools are commands that run in isolated subprocesses and return their stdout to the agent; plugins support automatic credential injection via `inject` configuration
260
+ - Core: Support multi-plugin repositories — `kimi plugin install` accepts git URLs with subpath to install a specific plugin from a monorepo (e.g., `https://github.com/org/repo.git/plugins/my-plugin`); when no subpath is provided and no root `plugin.json` exists, the CLI lists available plugins in immediate subdirectories
261
+ - Core: Unify plugin credential injection — plugins can declare `inject` fields in `plugin.json` to receive `api_key` and `base_url` from the host's configured LLM provider; works with both OAuth-managed tokens and static API keys
262
+ - Core: Add `Agent` tool for subagent delegation — the agent can now spawn persistent subagent instances with three built-in types (`coder`, `explore`, `plan`) to handle focused subtasks; each instance maintains its own context history within the session and can run in foreground or background with automatic result summarization
263
+ - Core: Unified approval runtime — approval requests from both foreground tool calls and background subagents are now coordinated through a single runtime and surfaced through the root UI channel; rejection responses can include feedback text to guide the model's next attempt
264
+ - Shell: Add interactive approval request panel — a new inline panel displays tool call details (diffs, shell commands) with options to approve once, approve for session, reject, or reject with written feedback to instruct the model on what to do instead
265
+ - Wire: Bump protocol version to 1.6 — `SubagentEvent` now includes `agent_id`, `subagent_type`, and `parent_tool_call_id` fields; `ApprovalRequest` includes source metadata (`source_kind`, `source_id`); `ApprovalResponse` supports a `feedback` field
266
+ - Vis: Add agents panel — new "Agents" tab in `kimi vis` to inspect subagent instances, view their events, and filter the wire timeline by agent scope
267
+ - Core: Change `TaskOutput` `block` parameter default from `true` to `false` — `TaskOutput` now returns a non-blocking status/output snapshot by default; set `block=true` only when you intentionally want to wait for task completion
268
+ - Shell: Show the current working directory, git branch, dirty state, and ahead/behind sync status directly in the prompt toolbar
269
+ - Shell: Surface active background bash task counts in the toolbar, rotate shortcut tips on a timer, and gracefully truncate the toolbar on narrow terminals to avoid overflow
270
+ - Web: Fix tool execution status synchronization on cancel and approval — tools now correctly transition to `output-denied` state when generation is stopped, and show the loading spinner (instead of checkmark) while executing after approval
271
+ - Web: Dismiss stale approval and question dialogs on session replay — when replaying a session or when the backend reports idle/stopped/error status, any pending approval/question dialogs are now properly dismissed to prevent orphaned interactive elements
272
+ - Web: Enable inline math formula rendering — single-dollar inline math (`$...$`) is now supported in addition to block math (`$$...$$`)
273
+ - Web: Improve Switch toggle proportions and alignment — the toggle track is now larger (36×20) with a consistent 16px thumb and smoother 16px travel animation
274
+ - Web: Show subagent type labels in activity panels — subagent activities now display their type (e.g. "Coder agent working") instead of the generic "Agent" label
275
+ - Web: Add feedback mode to approval dialog — press `4` to reject with written feedback text that guides the model's next attempt; approval requests from subagents show a source label and preview content (diffs, commands)
276
+ - Web: Visually distinguish sub-agent origin tool calls — tool messages originating from a subagent are rendered with a left border and a source type label for clearer attribution
277
+
278
+ ## 1.24.0 (2026-03-18)
279
+
280
+ - Shell: Increase pasted text placeholder thresholds to 1000 characters or 15 lines (previously 300 characters or 3 lines), making voice/typeless workflows less disruptive
281
+ - Core: Plan mode now supports multiple selectable approach options — when the agent's plan contains distinct alternative paths, `ExitPlanMode` can present 2–3 labeled choices for the user to pick which approach to execute; the chosen option is returned to the agent as the selected approach
282
+ - Core: Persist plan session ID and file path across process restarts — the plan session identifier and file slug are saved to `SessionState`, so restarting Kimi Code mid-plan resumes the same plan file in `~/.kimi/plans/` instead of creating a new one
283
+ - Core: Plan mode now supports incremental plan edits — the agent can use `StrReplaceFile` to surgically update sections of the plan file instead of rewriting the entire file with `WriteFile`, and non-plan file edits are now hard-blocked rather than requiring approval
284
+ - Core: Defer MCP startup and surface loading progress — MCP servers now initialize asynchronously after the shell UI starts, with live progress indicators showing connection status; Shell displays connecting and ready states in the status area, Web shows server connection status
285
+ - Core: Optimize lightweight startup paths — implement lazy-loading for CLI subcommands and version metadata, significantly reducing startup time for common commands like `--version` and `--help`
286
+ - Build: Fix Nix `FileCollisionError` for `bin/kimi` — remove duplicate entry point from `kimi-code` package so `kimi-cli` owns `bin/kimi` exclusively
287
+ - Shell: Preserve unsubmitted input across agent turns — text typed in the prompt while the agent is running is no longer lost when the turn ends; the user can press Enter to submit the draft as the next message
288
+ - Shell: Fix Ctrl-C and Ctrl-D not working correctly after an agent run completes — keyboard interrupts and EOF were silently swallowed instead of showing the tip or exiting the shell
289
+
290
+ ## 1.23.0 (2026-03-17)
291
+
292
+ - Shell: Add background bash — the `Shell` tool now accepts `run_in_background=true` to launch long-running commands (builds, tests, servers) as background tasks, freeing the agent to continue working; new `TaskList`, `TaskOutput`, and `TaskStop` tools manage task lifecycle, and the system automatically notifies the agent when tasks reach a terminal state
293
+ - Shell: Add `/task` slash command with interactive task browser — a three-column TUI to view, monitor, and manage background tasks with real-time refresh, output preview, and keyboard-driven stopping
294
+ - Web: Fix global config not refreshing on other tabs when model is changed — when the model is changed in one tab, other tabs now detect the config update and automatically refresh their global config
295
+
296
+ ## 1.22.0 (2026-03-13)
297
+
298
+ - Shell: Collapse long pasted text into `[Pasted text #n]` placeholders — text pasted via `Ctrl-V` or bracketed paste that exceeds 300 characters or 3 lines is displayed as a compact placeholder token in the prompt buffer while the full content is sent to the model; the external editor (`Ctrl-O`) expands placeholders for editing and re-folds them on save
299
+ - Shell: Cache pasted images as attachment placeholders — images pasted from the clipboard are stored on disk and shown as `[image:…]` tokens in the prompt, keeping the input buffer readable
300
+ - Shell: Fix UTF-16 surrogate characters in pasted text causing serialization errors — lone surrogates from Windows clipboard data are now sanitized before storage, preventing `UnicodeEncodeError` in history writes and JSON serialization
301
+ - Shell: Redesign slash command completion menu — replace the default completion popup with a full-width custom menu that shows command names and multi-line descriptions, with highlight and scroll support
302
+ - Shell: Fix cancelled shell commands not properly terminating child processes — when a running command is cancelled, the subprocess is now explicitly killed to prevent orphaned processes
303
+
304
+ ## 1.21.0 (2026-03-12)
305
+
306
+ - Shell: Add inline running prompt with steer input — agent output is now rendered inside the prompt area while the model is running, and users can type and send follow-up messages (steers) without waiting for the turn to finish; approval requests and question panels are handled inline with keyboard navigation
307
+ - Core: Change steer injection from synthetic tool calls to regular user messages — steer content is now appended as a standard user message instead of a fake `_steer` tool-call/tool-result pair, improving compatibility with context serialization and visualization
308
+ - Wire: Add `SteerInput` event — a new Wire protocol event emitted when the user sends a follow-up steer message during a running turn
309
+ - Shell: Echo user input after submission in agent mode — the prompt symbol and entered text are printed back to the terminal for a clearer conversation transcript
310
+ - Shell: Improve session replay with steer inputs — replay now correctly reconstructs and displays steer messages alongside regular turns, and filters out internal system-reminder messages
311
+ - Shell: Fix upgrade command in toast notifications — the upgrade command text is now sourced from a single `UPGRADE_COMMAND` constant for consistency
312
+ - Core: Persist system prompt in `context.jsonl` — the system prompt is now written as the first record of the context file and frozen per session, so visualization tools can read the full conversation context and session restores reuse the original prompt instead of regenerating it
313
+ - Vis: Add session directory shortcuts in `kimi vis` — open the current session folder directly from the session page, copy the raw session directory path with `Copy DIR`, and support opening directories on both macOS and Windows
314
+ - Shell: Improve API key login UX — show a spinner during key verification, display a helpful hint when a 401 error suggests the wrong platform was selected, show a setup summary on success, and default thinking mode to "on"
315
+
316
+ ## 1.20.0 (2026-03-11)
317
+
318
+ - Web: Add plan mode toggle in web UI — switch control in the input toolbar with a dashed blue border on the composer when plan mode is active, and support setting plan mode via the `set_plan_mode` Wire protocol method
319
+ - Core: Persist plan mode state across session restarts — `plan_mode` is saved to `SessionState` and restored when a session resumes
320
+ - Core: Fix StatusUpdate not reflecting plan mode changes triggered by tools — send a corrected `StatusUpdate` after `EnterPlanMode`/`ExitPlanMode` tool execution so the client sees the up-to-date state
321
+ - Core: Fix HTTP header values containing trailing whitespace/newlines on certain Linux systems (e.g. kernel 6.8.0-101) causing connection errors — strip whitespace from ASCII header values before sending
322
+ - Core: Fix OpenAI Responses provider sending implicit `reasoning.effort=null` which breaks Responses-compatible endpoints that require reasoning — reasoning parameters are now omitted unless explicitly set
323
+ - Vis: Add session download, import, export and delete — one-click ZIP download from session explorer and detail page, ZIP import into a dedicated `~/.kimi/imported_sessions/` directory with "Imported" filter toggle, `kimi export <session_id>` CLI command, and delete support for imported sessions with AlertDialog confirmation
324
+ - Core: Fix context compaction failing when conversation contains media parts (images, audio, video) — switch from blacklist filtering (exclude `ThinkPart`) to whitelist filtering (only keep `TextPart`) to prevent unsupported content types from being sent to the compaction API
325
+ - Web: Fix `@` file mention index not refreshing after switching sessions or when workspace files change — reset index on session switch, auto-refresh after 30s staleness, and support path-prefix search beyond the 500-file limit
326
+
327
+ ## 1.19.0 (2026-03-10)
328
+
329
+ - Core: Add plan mode — the agent can enter a planning phase (`EnterPlanMode`) where only read-only tools (Glob, Grep, ReadFile) are available, write a structured plan to a file, and present it for user approval (`ExitPlanMode`) before executing; toggle manually via `/plan` slash command or `Shift-Tab` keyboard shortcut
330
+ - Vis: Add `kimi vis` command for launching an interactive visualization dashboard to inspect session traces — includes wire event timeline, context viewer, session explorer, and usage statistics
331
+ - Web: Fix session stream state management — guard against null reference errors during state resets and preserve slash commands across session switches to avoid a brief empty gap
332
+
333
+ ## 1.18.0 (2026-03-09)
334
+
335
+ - ACP: Support embedded resource content in ACP mode so that Zed's `@` file references correctly include file contents
336
+ - Core: Use `parameters_json_schema` instead of `parameters` in Google GenAI provider to bypass Pydantic validation that rejects standard JSON Schema metadata fields in MCP tools
337
+ - Shell: Enhance `Ctrl-V` clipboard paste to support video files in addition to images — video file paths are inserted as text, and a crash when clipboard data is `None` is fixed
338
+ - Core: Pass session ID as `user_id` metadata to Anthropic API
339
+ - Web: Preserve slash commands on WebSocket reconnect and add automatic retry logic for session initialization
340
+
341
+ ## 1.17.0 (2026-03-03)
342
+
343
+ - Core: Add `/export` command to export current session context (messages, metadata) to a Markdown file, and `/import` command to import context from a file or another session ID into the current session
344
+ - Shell: Show token counts (used/total) alongside context usage percentage in the status bar (e.g., `context: 42.0% (4.2k/10.0k)`)
345
+ - Shell: Rotate keyboard shortcut tips in the toolbar — tips cycle through available shortcuts on each prompt submission to save horizontal space
346
+ - MCP: Add loading indicators for MCP server connections — Shell displays a "Connecting to MCP servers..." spinner and Web shows a status message while MCP tools are being loaded
347
+ - Web: Fix scrollable file list overflow in the toolbar changes panel
348
+ - Core: Add `compaction_trigger_ratio` config option (default `0.85`) to control when auto-compaction triggers — compaction now fires when context usage reaches the configured ratio or when remaining space falls below `reserved_context_size`, whichever comes first
349
+ - Core: Support custom instructions in `/compact` command (e.g., `/compact keep database discussions`) to guide what the compaction preserves
350
+ - Web: Add URL action parameters (`?action=create` to open create-session dialog, `?action=create-in-dir&workDir=xxx` to create a session directly) for external integrations, and support Cmd/Ctrl+Click on new-session buttons to open session creation in a new browser tab
351
+ - Web: Add todo list display in prompt toolbar — shows task progress with expandable panel when the `SetTodoList` tool is active
352
+ - ACP: Add authentication check for session operations with `AUTH_REQUIRED` error responses for terminal-based login flow
353
+
354
+ ## 1.16.0 (2026-02-27)
355
+
356
+ - Web: Update ASCII logo banner to a new styled design
357
+ - Core: Add `--add-dir` CLI option and `/add-dir` slash command to expand the workspace scope with additional directories — added directories are accessible to all file tools (read, write, glob, replace), persisted across sessions, and shown in the system prompt
358
+ - Shell: Add `Ctrl-O` keyboard shortcut to open the current input in an external editor (`$VISUAL`/`$EDITOR`), with auto-detection fallback to VS Code, Vim, Vi, or Nano
359
+ - Shell: Add `/editor` slash command to configure and switch the default external editor, with interactive selection and persistent config storage
360
+ - Shell: Add `/new` slash command to create and switch to a new session without restarting Kimi Code CLI
361
+ - Wire: Auto-hide `AskUserQuestion` tool when the client does not support the `supports_question` capability, preventing the LLM from invoking unsupported interactions
362
+ - Core: Estimate context token count after compaction so context usage percentage is not reported as 0%
363
+ - Web: Show context usage percentage with one decimal place for better precision
364
+
365
+ ## 1.15.0 (2026-02-27)
366
+
367
+ - Shell: Simplify input prompt by removing username prefix for a cleaner appearance
368
+ - Shell: Add horizontal separator line and expanded keyboard shortcut hints to the toolbar
369
+ - Shell: Add number key shortcuts (1–5) for quick option selection in question and approval panels, with redesigned bordered panel UI and keyboard hints
370
+ - Shell: Add tab-style navigation for multi-question panels — use Left/Right arrows or Tab to switch between questions, with visual indicators for answered, current, and pending states, and automatic state restoration when revisiting a question
371
+ - Shell: Allow Space key to submit single-select questions in the question panel
372
+ - Web: Add tab-style navigation for multi-question dialogs with clickable tab bar, keyboard navigation, and state restoration when revisiting a question
373
+ - Core: Set process title to "Kimi Code" (visible in `ps` / Activity Monitor / terminal tab title) and label web worker subprocesses as "kimi-code-worker"
374
+
375
+ ## 1.14.0 (2026-02-26)
376
+
377
+ - Shell: Make FetchURL tool's URL parameter a clickable hyperlink in the terminal
378
+ - Tool: Add `AskUserQuestion` tool for presenting structured questions with predefined options during execution, supporting single-select, multi-select, and custom text input
379
+ - Wire: Add `QuestionRequest` / `QuestionResponse` message types and capability negotiation for structured question interactions
380
+ - Shell: Add interactive question panel for `AskUserQuestion` with keyboard-driven option selection
381
+ - Web: Add `QuestionDialog` component for answering structured questions inline, replacing the prompt composer when a question is pending
382
+ - Core: Persist session state across sessions — approval decisions (YOLO mode, auto-approved actions) and dynamic subagents are now saved and restored when resuming a session
383
+ - Core: Use atomic JSON writes for metadata and session state files to prevent data corruption on crash
384
+ - Wire: Add `steer` request to inject user messages into an active agent turn (protocol version 1.4)
385
+ - Web: Allow Cmd/Ctrl+Click on FetchURL tool's URL parameter to open the link in a new browser tab, with platform-appropriate tooltip hint
386
+
387
+ ## 1.13.0 (2026-02-24)
388
+
389
+ - Core: Add automatic connection recovery that recreates the HTTP client on connection and timeout errors before retrying, improving resilience against transient network failures
390
+
391
+ ## 1.12.0 (2026-02-11)
392
+
393
+ - Web: Add subagent activity rendering to display subagent steps (thinking, tool calls, text) inside Task tool messages
394
+ - Web: Add Think tool rendering as a lightweight reasoning-style block
395
+ - Web: Replace emoji status indicators with Lucide icons for tool states and add category-specific icons for tool names
396
+ - Web: Enhance Reasoning component with improved thinking labels and status icons
397
+ - Web: Enhance Todo component with status icons and improved styling
398
+ - Web: Implement WebSocket reconnection with automatic request resending and stale connection watchdog
399
+ - Web: Enhance session creation dialog with command value handling
400
+ - Web: Support tilde (`~`) expansion in session work directory paths
401
+ - Web: Fix assistant message content overflow clipping
402
+ - Wire: Fix deadlock when multiple subagents run concurrently by not blocking the UI loop on approval and tool-call requests
403
+ - Wire: Clean up stale pending requests after agent turn ends
404
+ - Web: Show placeholder text in prompt input with hints for slash commands and file mentions
405
+ - Web: Fix Ctrl+C not working in uvicorn web server by restoring default SIGINT handler and terminal state after shell mode exits
406
+ - Web: Improve session stop handling with proper async cleanup and timeout
407
+ - ACP: Add protocol version negotiation framework for client-server compatibility
408
+ - ACP: Add session resume method to restore session state (experimental)
409
+
410
+ ## 1.11.0 (2026-02-10)
411
+
412
+ - Web: Move context usage indicator from workspace header to prompt toolbar with a hover card showing detailed token usage breakdown
413
+ - Web: Add folder indicator with work directory path to the bottom of the file changes panel
414
+ - Web: Fix stderr not being restored when switching to web mode, which could suppress web server error output
415
+ - Web: Fix port availability check by setting SO_REUSEADDR on the test socket
416
+
417
+ ## 1.10.0 (2026-02-09)
418
+
419
+ - Web: Add copy and fork action buttons to assistant messages for quick content copying and session forking
420
+ - Web: Add keyboard shortcuts for approval actions — press `1` to approve, `2` to approve for session, `3` to decline
421
+ - Web: Add message queueing — queue follow-up messages while the AI is processing; queued messages are sent automatically when the response completes
422
+ - Web: Replace Git diff status bar with unified prompt toolbar showing activity status, message queue, and file changes in collapsible tabs
423
+ - Web: Load global MCP configuration in web worker so web sessions can use MCP tools
424
+ - Web: Improve mobile prompt input UX — reduce textarea min-height, add `autoComplete="off"`, and disable focus ring on small screens
425
+ - Web: Handle models that stream text before thinking by ensuring thinking messages always appear before text in the message list
426
+ - Web: Show more specific status messages during session connection ("Loading history...", "Starting environment..." instead of generic "Connecting...")
427
+ - Web: Send error status when session environment initialization fails instead of leaving UI in a waiting state
428
+ - Web: Auto-reconnect when no session status received within 15 seconds after history replay completes
429
+ - Web: Use non-blocking file I/O in session streaming to avoid blocking the event loop during history replay
430
+
431
+ ## 1.9.0 (2026-02-06)
432
+
433
+ - Config: Add `default_yolo` config option to enable YOLO (auto-approve) mode by default
434
+ - Config: Accept both `max_steps_per_turn` and `max_steps_per_run` as aliases for the loop control setting
435
+ - Wire: Add `replay` request to stream recorded Wire events (protocol version 1.3)
436
+ - Web: Add session fork feature to branch off a new session from any assistant response
437
+ - Web: Add session archive feature with auto-archive for sessions older than 15 days
438
+ - Web: Add multi-select mode for bulk archive, unarchive, and delete operations
439
+ - Web: Add media preview for tool results (images/videos from ReadMediaFile) with clickable thumbnails
440
+ - Web: Add shell command and todo list display components for tool outputs
441
+ - Web: Add activity status indicator showing agent state (processing, waiting for approval, etc.)
442
+ - Web: Add error fallback UI when images fail to load
443
+ - Web: Redesign tool input UI with expandable parameters and syntax highlighting for long values
444
+ - Web: Show compaction indicator when context is being compacted
445
+ - Web: Improve auto-scroll behavior in chat for smoother following of new content
446
+ - Web: Update `last_session_id` for work directory when session stream starts
447
+ - Shell: Remove `Ctrl-/` keyboard shortcut that triggered `/help` command
448
+ - Rust: Move the Rust implementation to `MoonshotAI/kimi-agent-rs` with independent releases; binary renamed to `kimi-agent`
449
+ - Core: Preserve session id when reloading configuration so the session resumes correctly
450
+ - Shell: Fix session replay showing messages that were cleared by `/clear` or `/reset`
451
+ - Web: Fix approval request states not updating when session is interrupted or cancelled
452
+ - Web: Fix IME composition issue when selecting slash commands
453
+ - Web: Fix UI not clearing messages after `/clear`, `/reset`, or `/compact` commands
454
+
455
+ ## 1.8.0 (2026-02-05)
456
+
457
+ - CLI: Fix startup errors (e.g. invalid config files) being silently swallowed instead of displayed
458
+
459
+ ## 1.7.0 (2026-02-05)
460
+
461
+ - Rust: Add `kagent`, the Rust implementation of Kimi agent kernel with wire-mode support (experimental)
462
+ - Auth: Fix OAuth token refresh conflicts when running multiple sessions simultaneously
463
+ - Web: Add file mention menu (`@`) to reference uploaded attachments and workspace files with autocomplete
464
+ - Web: Add slash command menu in chat input with autocomplete, keyboard navigation, and alias support
465
+ - Web: Prompt to create directory when specified path doesn't exist during session creation
466
+ - Web: Fix authentication token persistence by switching from sessionStorage to localStorage with 24-hour expiry
467
+ - Web: Add server-side pagination for session list with virtualized scrolling for better performance
468
+ - Web: Improve session and work directories loading with smarter caching and invalidation
469
+ - Web: Fix WebSocket errors during history replay by checking connection state before sending
470
+ - Web: Git diff status bar now shows untracked files (new files not yet added to git)
471
+ - Web: Restrict sensitive APIs only in public mode; update origin enforcement logic
472
+
473
+ ## 1.6 (2026-02-03)
474
+
475
+ - Web: Add token-based authentication and access control for network mode (`--network`, `--lan-only`, `--public`)
476
+ - Web: Add security options: `--auth-token`, `--allowed-origins`, `--restrict-sensitive-apis`, `--dangerously-omit-auth`
477
+ - Web: Change `--host` option to bind to specific IP address; add automatic network address detection
478
+ - Web: Fix WebSocket disconnect when creating new sessions
479
+ - Web: Increase maximum image dimension from 1024 to 4096 pixels
480
+ - Web: Improve UI responsiveness with enhanced hover effects and better layout handling
481
+ - Wire: Add `TurnEnd` event to signal the completion of an agent turn (protocol version 1.2)
482
+ - Core: Fix custom agent prompt files containing `$` causing silent startup failure
483
+
484
+ ## 1.5 (2026-01-30)
485
+
486
+ - Web: Add Git diff status bar showing uncommitted changes in session working directory
487
+ - Web: Add "Open in" menu for opening files/directories in Terminal, VS Code, Cursor, or other local applications
488
+ - Web: Add search functionality to filter sessions by title or working directory
489
+ - Web: Improve session title display with proper overflow handling
490
+
491
+ ## 1.4 (2026-01-30)
492
+
493
+ - Shell: Merge `/login` and `/setup` commands; `/setup` is now an alias for `/login`
494
+ - Shell: `/usage` now shows remaining quota percentage; add `/status` alias
495
+ - Config: Add `KIMI_SHARE_DIR` environment variable to customize the share directory path (default: `~/.kimi`)
496
+ - Web: Add new Web UI for browser-based interaction
497
+ - CLI: Add `kimi web` subcommand to launch the Web UI server
498
+ - Auth: Fix encoding error when device name or OS version contains non-ASCII characters
499
+ - Auth: OAuth credentials are now stored in files instead of keyring; existing tokens are automatically migrated on startup
500
+ - Auth: Fix authorization failure after the system sleeps or hibernates
501
+
502
+ ## 1.3 (2026-01-28)
503
+
504
+ - Auth: Fix authentication issue during agent turns
505
+ - Tool: Wrap media content with descriptive tags in `ReadMediaFile` for better path traceability
506
+
507
+ ## 1.2 (2026-01-27)
508
+
509
+ - UI: Show description for `kimi-for-coding` model
510
+
511
+ ## 1.1 (2026-01-27)
512
+
513
+ - LLM: Fix `kimi-for-coding` model's capabilities
514
+
515
+ ## 1.0 (2026-01-27)
516
+
517
+ - Shell: Add `/login` and `/logout` slash commands for login and logout
518
+ - CLI: Add `kimi login` and `kimi logout` subcommands
519
+ - Core: Fix subagent approval request handling
520
+
521
+ ## 0.88 (2026-01-26)
522
+
523
+ - MCP: Remove `Mcp-Session-Id` header when connecting to MCP servers to fix compatibility
524
+
525
+ ## 0.87 (2026-01-25)
526
+
527
+ - Shell: Fix Markdown rendering error when HTML blocks appear outside any element
528
+ - Skills: Add more user-level and project-level skills directory candidates
529
+ - Core: Improve system prompt guidance for media file generation and processing tasks
530
+ - Shell: Fix image pasting from clipboard on macOS
531
+
532
+ ## 0.86 (2026-01-24)
533
+
534
+ - Build: Fix binary builds
535
+
536
+ ## 0.85 (2026-01-24)
537
+
538
+ - Shell: Cache pasted images to disk for persistence across sessions
539
+ - Shell: Deduplicate cached attachments based on content hash
540
+ - Shell: Fix display of image/audio/video attachments in message history
541
+ - Tool: Use file path as media identifier in `ReadMediaFile` for better traceability
542
+ - Tool: Fix some MP4 files not being recognized as videos
543
+ - Shell: Handle Ctrl-C during slash command execution
544
+ - Shell: Fix shlex parsing error in shell mode when input contains invalid shell syntax
545
+ - Shell: Fix stderr output from MCP servers and third-party libraries polluting shell UI
546
+ - Wire: Graceful shutdown with proper cleanup of pending requests when connection closes or Ctrl-C is received
547
+
548
+ ## 0.84 (2026-01-22)
549
+
550
+ - Build: Add cross-platform standalone binary builds for Windows, macOS (with code signing and notarization), and Linux (x86_64 and ARM64)
551
+ - Shell: Fix slash command autocomplete showing suggestions for exact command/alias matches
552
+ - Tool: Treat SVG files as text instead of images
553
+ - Flow: Support D2 markdown block strings (`|md` syntax) for multiline node labels in flow skills
554
+ - Core: Fix possible "event loop is closed" error after running `/reload`, `/setup`, or `/clear`
555
+ - Core: Fix panic when `/clear` is used in a continued session
556
+
557
+ ## 0.83 (2026-01-21)
558
+
559
+ - Tool: Add `ReadMediaFile` tool for reading image/video files; `ReadFile` now focuses on text files only
560
+ - Skills: Flow skills now also register as `/skill:<skill-name>` commands (in addition to `/flow:<skill-name>`)
561
+
562
+ ## 0.82 (2026-01-21)
563
+
564
+ - Tool: Allow `WriteFile` and `StrReplaceFile` tools to edit/write files outside the working directory when using absolute paths
565
+ - Tool: Upload videos to Kimi files API when using Kimi provider, replacing inline data URLs with `ms://` references
566
+ - Config: Add `reserved_context_size` setting to customize auto-compaction trigger threshold (default: 50000 tokens)
567
+
568
+ ## 0.81 (2026-01-21)
569
+
570
+ - Skills: Add flow skill type with embedded Agent Flow (Mermaid/D2) in SKILL.md, invoked via `/flow:<skill-name>` commands
571
+ - CLI: Remove `--prompt-flow` option; use flow skills instead
572
+ - Core: Replace `/begin` command with `/flow:<skill-name>` commands for flow skills
573
+
574
+ ## 0.80 (2026-01-20)
575
+
576
+ - Wire: Add `initialize` method for exchanging client/server info, external tools registration and slash commands advertisement
577
+ - Wire: Support external tool calls via Wire protocol
578
+ - Wire: Rename `ApprovalRequestResolved` to `ApprovalResponse` (backwards-compatible)
579
+
580
+ ## 0.79 (2026-01-19)
581
+
582
+ - Skills: Add project-level skills support, discovered from `.agents/skills/` (or `.kimi/skills/`, `.claude/skills/`)
583
+ - Skills: Unified skills discovery with layered loading (builtin → user → project); user-level skills now prefer `~/.config/agents/skills/`
584
+ - Shell: Support fuzzy matching for slash command autocomplete
585
+ - Shell: Enhanced approval request preview with shell command and diff content display, use `Ctrl-E` to expand full content
586
+ - Wire: Add `ShellDisplayBlock` type for shell command display in approval requests
587
+ - Shell: Reorder `/help` to show keyboard shortcuts before slash commands
588
+ - Wire: Return proper JSON-RPC 2.0 error responses for invalid requests
589
+
590
+ ## 0.78 (2026-01-16)
591
+
592
+ - CLI: Add D2 flowchart format support for Prompt Flow (`.d2` extension)
593
+
594
+ ## 0.77 (2026-01-15)
595
+
596
+ - Shell: Fix line breaking in `/help` and `/changelog` fullscreen pager display
597
+ - Shell: Use `/model` to toggle thinking mode instead of Tab key
598
+ - Config: Add `default_thinking` config option (need to run `/model` to select thinking mode after upgrade)
599
+ - LLM: Add `always_thinking` capability for models that always use thinking mode
600
+ - CLI: Rename `--command`/`-c` to `--prompt`/`-p`, keep `--command`/`-c` as alias, remove `--query`/`-q`
601
+ - Wire: Fix approval requests not responding properly in Wire mode
602
+ - CLI: Add `--prompt-flow` option to load a Mermaid flowchart file as a Prompt Flow
603
+ - Core: Add `/begin` slash command if a Prompt Flow is loaded to start the flow
604
+ - Core: Replace Ralph Loop with Prompt Flow-based implementation
605
+
606
+ ## 0.76 (2026-01-12)
607
+
608
+ - Tool: Make `ReadFile` tool description reflect model capabilities for image/video support
609
+ - Tool: Fix TypeScript files (`.ts`, `.tsx`, `.mts`, `.cts`) being misidentified as video files
610
+ - Shell: Allow slash commands (`/help`, `/exit`, `/version`, `/changelog`, `/feedback`) in shell mode
611
+ - Shell: Improve `/help` with fullscreen pager, showing slash commands, skills, and keyboard shortcuts
612
+ - Shell: Improve `/changelog` and `/mcp` display with consistent bullet-style formatting
613
+ - Shell: Show current model name in the bottom status bar
614
+ - Shell: Add `Ctrl-/` shortcut to show help
615
+
616
+ ## 0.75 (2026-01-09)
617
+
618
+ - Tool: Improve `ReadFile` tool description
619
+ - Skills: Add built-in `kimi-cli-help` skill to answer Kimi Code CLI usage and configuration questions
620
+
621
+ ## 0.74 (2026-01-09)
622
+
623
+ - ACP: Allow ACP clients to select and switch models (with thinking variants)
624
+ - ACP: Add `terminal-auth` authentication method for setup flow
625
+ - CLI: Deprecate `--acp` option in favor of `kimi acp` subcommand
626
+ - Tool: Support reading image and video files in `ReadFile` tool
627
+
628
+ ## 0.73 (2026-01-09)
629
+
630
+ - Skills: Add built-in skill-creator skill shipped with the package
631
+ - Tool: Expand `~` to the home directory in `ReadFile` paths
632
+ - MCP: Ensure MCP tools finish loading before starting the agent loop
633
+ - Wire: Fix Wire mode failing to accept valid `cancel` requests
634
+ - Setup: Allow `/model` to switch between all available models for the selected provider
635
+ - Lib: Re-export all Wire message types from `kimi_cli.wire.types`, as a replacement of `kimi_cli.wire.message`
636
+ - Loop: Add `max_ralph_iterations` loop control config to limit extra Ralph iterations
637
+ - Config: Rename `max_steps_per_run` to `max_steps_per_turn` in loop control config (backward-compatible)
638
+ - CLI: Add `--max-steps-per-turn`, `--max-retries-per-step` and `--max-ralph-iterations` options to override loop control config
639
+ - SlashCmd: Make `/yolo` toggle auto-approve mode
640
+ - UI: Show a YOLO badge in the shell prompt
641
+
642
+ ## 0.72 (2026-01-04)
643
+
644
+ - Python: Fix installation on Python 3.14.
645
+
646
+ ## 0.71 (2026-01-04)
647
+
648
+ - ACP: Route file reads/writes and shell commands through ACP clients for synced edits/output
649
+ - Shell: Add `/model` slash command to switch default models and reload when using the default config
650
+ - Skills: Add `/skill:<name>` slash commands to load `SKILL.md` instructions on demand
651
+ - CLI: Add `kimi info` subcommand for version/protocol details (supports `--json`)
652
+ - CLI: Add `kimi term` to launch the Toad terminal UI
653
+ - Python: Bump the default tooling/CI version to 3.14
654
+
655
+ ## 0.70 (2025-12-31)
656
+
657
+ - CLI: Add `--final-message-only` (and `--quiet` alias) to only output the final assistant message in print UI
658
+ - LLM: Add `video_in` model capability and support video inputs
659
+
660
+ ## 0.69 (2025-12-29)
661
+
662
+ - Core: Support discovering skills in `~/.kimi/skills` or `~/.claude/skills`
663
+ - Python: Lower the minimum required Python version to 3.12
664
+ - Nix: Add flake packaging; install with `nix profile install .#kimi-cli` or run `nix run .#kimi-cli`
665
+ - CLI: Add `kimi-cli` script alias for invoking the CLI; can be run via `uvx kimi-cli`
666
+ - Lib: Move LLM config validation into `create_llm` and return `None` when missing config
667
+
668
+ ## 0.68 (2025-12-24)
669
+
670
+ - CLI: Add `--config` and `--config-file` options to pass in config JSON/TOML
671
+ - Core: Allow `Config` in addition to `Path` for the `config` parameter of `KimiCLI.create`
672
+ - Tool: Include diff display blocks in `WriteFile` and `StrReplaceFile` approvals/results
673
+ - Wire: Add display blocks to approval requests (including diffs) with backward-compatible defaults
674
+ - ACP: Show file diff previews in tool results and approval prompts
675
+ - ACP: Connect to MCP servers managed by ACP clients
676
+ - ACP: Run shell commands in ACP client terminal if supported
677
+ - Lib: Add `KimiToolset.find` method to find tools by class or name
678
+ - Lib: Add `ToolResultBuilder.display` method to append display blocks to tool results
679
+ - MCP: Add `kimi mcp auth` and related subcommands to manage MCP authorization
680
+
681
+ ## 0.67 (2025-12-22)
682
+
683
+ - ACP: Advertise slash commands in single-session ACP mode (`kimi --acp`)
684
+ - MCP: Add `mcp.client` config section to configure MCP tool call timeout and other future options
685
+ - Core: Improve default system prompt and `ReadFile` tool
686
+ - UI: Fix Ctrl-C not working in some rare cases
687
+
688
+ ## 0.66 (2025-12-19)
689
+
690
+ - Lib: Provide `token_usage` and `message_id` in `StatusUpdate` Wire message
691
+ - Lib: Add `KimiToolset.load_tools` method to load tools with dependency injection
692
+ - Lib: Add `KimiToolset.load_mcp_tools` method to load MCP tools
693
+ - Lib: Move `MCPTool` from `kimi_cli.tools.mcp` to `kimi_cli.soul.toolset`
694
+ - Lib: Add `InvalidToolError`, `MCPConfigError` and `MCPRuntimeError`
695
+ - Lib: Make the detailed Kimi Code CLI exception classes extend `ValueError` or `RuntimeError`
696
+ - Lib: Allow passing validated `list[fastmcp.mcp_config.MCPConfig]` as `mcp_configs` for `KimiCLI.create` and `load_agent`
697
+ - Lib: Fix exception raising for `KimiCLI.create`, `load_agent`, `KimiToolset.load_tools` and `KimiToolset.load_mcp_tools`
698
+ - LLM: Add provider type `vertexai` to support Vertex AI
699
+ - LLM: Rename Gemini Developer API provider type from `google_genai` to `gemini`
700
+ - Config: Migrate config file from JSON to TOML
701
+ - MCP: Connect to MCP servers in background and parallel to reduce startup time
702
+ - MCP: Add `mcp-session-id` HTTP header when connecting to MCP servers
703
+ - Lib: Split slash commands (prev "meta commands") into two groups: Shell-level and KimiSoul-level
704
+ - Lib: Add `available_slash_commands` property to `Soul` protocol
705
+ - ACP: Advertise slash commands `/init`, `/compact` and `/yolo` to ACP clients
706
+ - SlashCmd: Add `/mcp` slash command to display MCP server and tool status
707
+
708
+ ## 0.65 (2025-12-16)
709
+
710
+ - Lib: Support creating named sessions via `Session.create(work_dir, session_id)`
711
+ - CLI: Automatically create new session when specified session ID is not found
712
+ - CLI: Delete empty sessions on exit and ignore sessions whose context file is empty when listing
713
+ - UI: Improve session replaying
714
+ - Lib: Add `model_config: LLMModel | None` and `provider_config: LLMProvider | None` properties to `LLM` class
715
+ - MetaCmd: Add `/usage` meta command to show API usage for Kimi Code users
716
+
717
+ ## 0.64 (2025-12-15)
718
+
719
+ - UI: Fix UTF-16 surrogate characters input on Windows
720
+ - Core: Add `/sessions` meta command to list existing sessions and switch to a selected one
721
+ - CLI: Add `--session/-S` option to specify session ID to resume
722
+ - MCP: Add `kimi mcp` subcommand group to manage global MCP config file `~/.kimi/mcp.json`
723
+
724
+ ## 0.63 (2025-12-12)
725
+
726
+ - Tool: Fix `FetchURL` tool incorrect output when fetching via service fails
727
+ - Tool: Use `bash` instead of `sh` in `Shell` tool for better compatibility
728
+ - Tool: Fix `Grep` tool unicode decoding error on Windows
729
+ - ACP: Support ACP session continuation (list/load sessions) with `kimi acp` subcommand
730
+ - Lib: Add `Session.find` and `Session.list` static methods to find and list sessions
731
+ - ACP: Update agent plans on the client side when `SetTodoList` tool is called
732
+ - UI: Prevent normal messages starting with `/` from being treated as meta commands
733
+
734
+ ## 0.62 (2025-12-08)
735
+
736
+ - ACP: Fix tool results (including Shell tool output) not being displayed in ACP clients like Zed
737
+ - ACP: Fix compatibility with the latest version of Zed IDE (0.215.3)
738
+ - Tool: Use PowerShell instead of CMD on Windows for better usability
739
+ - Core: Fix startup crash when there is broken symbolic link in the working directory
740
+ - Core: Add builtin `okabe` agent file with `SendDMail` tool enabled
741
+ - CLI: Add `--agent` option to specify builtin agents like `default` and `okabe`
742
+ - Core: Improve compaction logic to better preserve relevant information
743
+
744
+ ## 0.61 (2025-12-04)
745
+
746
+ - Lib: Fix logging when used as a library
747
+ - Tool: Harden file path check to protect against shared-prefix escape
748
+ - LLM: Improve compatibility with some third-party OpenAI Responses and Anthropic API providers
749
+
750
+ ## 0.60 (2025-12-01)
751
+
752
+ - LLM: Fix interleaved thinking for Kimi and OpenAI-compatible providers
753
+
754
+ ## 0.59 (2025-11-28)
755
+
756
+ - Core: Move context file location to `.kimi/sessions/{workdir_md5}/{session_id}/context.jsonl`
757
+ - Lib: Move `WireMessage` type alias to `kimi_cli.wire.message`
758
+ - Lib: Add `kimi_cli.wire.message.Request` type alias request messages (which currently only includes `ApprovalRequest`)
759
+ - Lib: Add `kimi_cli.wire.message.is_event`, `is_request` and `is_wire_message` utility functions to check the type of wire messages
760
+ - Lib: Add `kimi_cli.wire.serde` module for serialization and deserialization of wire messages
761
+ - Lib: Change `StatusUpdate` Wire message to not using `kimi_cli.soul.StatusSnapshot`
762
+ - Core: Record Wire messages to a JSONL file in session directory
763
+ - Core: Introduce `TurnBegin` Wire message to mark the beginning of each agent turn
764
+ - UI: Print user input again with a panel in shell mode
765
+ - Lib: Add `Session.dir` property to get the session directory path
766
+ - UI: Improve "Approve for session" experience when there are multiple parallel subagents
767
+ - Wire: Reimplement Wire server mode (which is enabled with `--wire` option)
768
+ - Lib: Rename `ShellApp` to `Shell`, `PrintApp` to `Print`, `ACPServer` to `ACP` and `WireServer` to `WireOverStdio` for better consistency
769
+ - Lib: Rename `KimiCLI.run_shell_mode` to `run_shell`, `run_print_mode` to `run_print`, `run_acp_server` to `run_acp`, and `run_wire_server` to `run_wire_stdio` for better consistency
770
+ - Lib: Add `KimiCLI.run` method to run a turn with given user input and yield Wire messages
771
+ - Print: Fix stream-json print mode not flushing output properly
772
+ - LLM: Improve compatibility with some OpenAI and Anthropic API providers
773
+ - Core: Fix chat provider error after compaction when using Anthropic API
774
+
775
+ ## 0.58 (2025-11-21)
776
+
777
+ - Core: Fix field inheritance of agent spec files when using `extend`
778
+ - Core: Support using MCP tools in subagents
779
+ - Tool: Add `CreateSubagent` tool to create subagents dynamically (not enabled in default agent)
780
+ - Tool: Use MoonshotFetch service in `FetchURL` tool for Kimi Code plan
781
+ - Tool: Truncate Grep tool output to avoid exceeding token limit
782
+
783
+ ## 0.57 (2025-11-20)
784
+
785
+ - LLM: Fix Google GenAI provider when thinking toggle is not on
786
+ - UI: Improve approval request wordings
787
+ - Tool: Remove `PatchFile` tool
788
+ - Tool: Rename `Bash`/`CMD` tool to `Shell` tool
789
+ - Tool: Move `Task` tool to `kimi_cli.tools.multiagent` module
790
+
791
+ ## 0.56 (2025-11-19)
792
+
793
+ - LLM: Add support for Google GenAI provider
794
+
795
+ ## 0.55 (2025-11-18)
796
+
797
+ - Lib: Add `kimi_cli.app.enable_logging` function to enable logging when directly using `KimiCLI` class
798
+ - Core: Fix relative path resolution in agent spec files
799
+ - Core: Prevent from panic when LLM API connection failed
800
+ - Tool: Optimize `FetchURL` tool for better content extraction
801
+ - Tool: Increase MCP tool call timeout to 60 seconds
802
+ - Tool: Provide better error message in `Glob` tool when pattern is `**`
803
+ - ACP: Fix thinking content not displayed properly
804
+ - UI: Minor UI improvements in shell mode
805
+
806
+ ## 0.54 (2025-11-13)
807
+
808
+ - Lib: Move `WireMessage` from `kimi_cli.wire.message` to `kimi_cli.wire`
809
+ - Print: Fix `stream-json` output format missing the last assistant message
810
+ - UI: Add warning when API key is overridden by `KIMI_API_KEY` environment variable
811
+ - UI: Make a bell sound when there's an approval request
812
+ - Core: Fix context compaction and clearing on Windows
813
+
814
+ ## 0.53 (2025-11-12)
815
+
816
+ - UI: Remove unnecessary trailing spaces in console output
817
+ - Core: Throw error when there are unsupported message parts
818
+ - MetaCmd: Add `/yolo` meta command to enable YOLO mode after startup
819
+ - Tool: Add approval request for MCP tools
820
+ - Tool: Disable `Think` tool in default agent
821
+ - CLI: Restore thinking mode from last time when `--thinking` is not specified
822
+ - CLI: Fix `/reload` not working in binary packed by PyInstaller
823
+
824
+ ## 0.52 (2025-11-10)
825
+
826
+ - CLI: Remove `--ui` option in favor of `--print`, `--acp`, and `--wire` flags (shell is still the default)
827
+ - CLI: More intuitive session continuation behavior
828
+ - Core: Add retry for LLM empty responses
829
+ - Tool: Change `Bash` tool to `CMD` tool on Windows
830
+ - UI: Fix completion after backspacing
831
+ - UI: Fix code block rendering issues on light background colors
832
+
833
+ ## 0.51 (2025-11-08)
834
+
835
+ - Lib: Rename `Soul.model` to `Soul.model_name`
836
+ - Lib: Rename `LLMModelCapability` to `ModelCapability` and move to `kimi_cli.llm`
837
+ - Lib: Add `"thinking"` to `ModelCapability`
838
+ - Lib: Remove `LLM.supports_image_in` property
839
+ - Lib: Add required `Soul.model_capabilities` property
840
+ - Lib: Rename `KimiSoul.set_thinking_mode` to `KimiSoul.set_thinking`
841
+ - Lib: Add `KimiSoul.thinking` property
842
+ - UI: Better checks and notices for LLM model capabilities
843
+ - UI: Clear the screen for `/clear` meta command
844
+ - Tool: Support auto-downloading ripgrep on Windows
845
+ - CLI: Add `--thinking` option to start in thinking mode
846
+ - ACP: Support thinking content in ACP mode
847
+
848
+ ## 0.50 (2025-11-07)
849
+
850
+ ### Changed
851
+
852
+ - Improve UI look and feel
853
+ - Improve Task tool observability
854
+
855
+ ## 0.49 (2025-11-06)
856
+
857
+ ### Fixed
858
+
859
+ - Minor UX improvements
860
+
861
+ ## 0.48 (2025-11-06)
862
+
863
+ ### Added
864
+
865
+ - Support Kimi K2 thinking mode
866
+
867
+ ## 0.47 (2025-11-05)
868
+
869
+ ### Fixed
870
+
871
+ - Fix Ctrl-W not working in some environments
872
+ - Do not load SearchWeb tool when the search service is not configured
873
+
874
+ ## 0.46 (2025-11-03)
875
+
876
+ ### Added
877
+
878
+ - Introduce Wire over stdio for local IPC (experimental, subject to change)
879
+ - Support Anthropic provider type
880
+
881
+ ### Fixed
882
+
883
+ - Fix binary packed by PyInstaller not working due to wrong entrypoint
884
+
885
+ ## 0.45 (2025-10-31)
886
+
887
+ ### Added
888
+
889
+ - Allow `KIMI_MODEL_CAPABILITIES` environment variable to override model capabilities
890
+ - Add `--no-markdown` option to disable markdown rendering
891
+ - Support `openai_responses` LLM provider type
892
+
893
+ ### Fixed
894
+
895
+ - Fix crash when continuing a session
896
+
897
+ ## 0.44 (2025-10-30)
898
+
899
+ ### Changed
900
+
901
+ - Improve startup time
902
+
903
+ ### Fixed
904
+
905
+ - Fix potential invalid bytes in user input
906
+
907
+ ## 0.43 (2025-10-30)
908
+
909
+ ### Added
910
+
911
+ - Basic Windows support (experimental)
912
+ - Display warnings when base URL or API key is overridden in environment variables
913
+ - Support image input if the LLM model supports it
914
+ - Replay recent context history when continuing a session
915
+
916
+ ### Fixed
917
+
918
+ - Ensure new line after executing shell commands
919
+
920
+ ## 0.42 (2025-10-28)
921
+
922
+ ### Added
923
+
924
+ - Support Ctrl-J or Alt-Enter to insert a new line
925
+
926
+ ### Changed
927
+
928
+ - Change mode switch shortcut from Ctrl-K to Ctrl-X
929
+ - Improve overall robustness
930
+
931
+ ### Fixed
932
+
933
+ - Fix ACP server `no attribute` error
934
+
935
+ ## 0.41 (2025-10-26)
936
+
937
+ ### Fixed
938
+
939
+ - Fix a bug for Glob tool when no matching files are found
940
+ - Ensure reading files with UTF-8 encoding
941
+
942
+ ### Changed
943
+
944
+ - Disable reading command/query from stdin in shell mode
945
+ - Clarify the API platform selection in `/setup` meta command
946
+
947
+ ## 0.40 (2025-10-24)
948
+
949
+ ### Added
950
+
951
+ - Support `ESC` key to interrupt the agent loop
952
+
953
+ ### Fixed
954
+
955
+ - Fix SSL certificate verification error in some rare cases
956
+ - Fix possible decoding error in Bash tool
957
+
958
+ ## 0.39 (2025-10-24)
959
+
960
+ ### Fixed
961
+
962
+ - Fix context compaction threshold check
963
+ - Fix panic when SOCKS proxy is set in the shell session
964
+
965
+ ## 0.38 (2025-10-24)
966
+
967
+ - Minor UX improvements
968
+
969
+ ## 0.37 (2025-10-24)
970
+
971
+ ### Fixed
972
+
973
+ - Fix update checking
974
+
975
+ ## 0.36 (2025-10-24)
976
+
977
+ ### Added
978
+
979
+ - Add `/debug` meta command to debug the context
980
+ - Add auto context compaction
981
+ - Add approval request mechanism
982
+ - Add `--yolo` option to automatically approve all actions
983
+ - Render markdown content for better readability
984
+
985
+ ### Fixed
986
+
987
+ - Fix "unknown error" message when interrupting a meta command
988
+
989
+ ## 0.35 (2025-10-22)
990
+
991
+ ### Changed
992
+
993
+ - Minor UI improvements
994
+ - Auto download ripgrep if not found in the system
995
+ - Always approve tool calls in `--print` mode
996
+ - Add `/feedback` meta command
997
+
998
+ ## 0.34 (2025-10-21)
999
+
1000
+ ### Added
1001
+
1002
+ - Add `/update` meta command to check for updates and auto-update in background
1003
+ - Support running interactive shell commands in raw shell mode
1004
+ - Add `/setup` meta command to setup LLM provider and model
1005
+ - Add `/reload` meta command to reload configuration
1006
+
1007
+ ## 0.33 (2025-10-18)
1008
+
1009
+ ### Added
1010
+
1011
+ - Add `/version` meta command
1012
+ - Add raw shell mode, which can be switched to by Ctrl-K
1013
+ - Show shortcuts in bottom status line
1014
+
1015
+ ### Fixed
1016
+
1017
+ - Fix logging redirection
1018
+ - Merge duplicated input histories
1019
+
1020
+ ## 0.32 (2025-10-16)
1021
+
1022
+ ### Added
1023
+
1024
+ - Add bottom status line
1025
+ - Support file path auto-completion (`@filepath`)
1026
+
1027
+ ### Fixed
1028
+
1029
+ - Do not auto-complete meta command in the middle of user input
1030
+
1031
+ ## 0.31 (2025-10-14)
1032
+
1033
+ ### Fixed
1034
+
1035
+ - Fix step interrupting by Ctrl-C, for real
1036
+
1037
+ ## 0.30 (2025-10-14)
1038
+
1039
+ ### Added
1040
+
1041
+ - Add `/compact` meta command to allow manually compacting context
1042
+
1043
+ ### Fixed
1044
+
1045
+ - Fix `/clear` meta command when context is empty
1046
+
1047
+ ## 0.29 (2025-10-14)
1048
+
1049
+ ### Added
1050
+
1051
+ - Support Enter key to accept completion in shell mode
1052
+ - Remember user input history across sessions in shell mode
1053
+ - Add `/reset` meta command as an alias for `/clear`
1054
+
1055
+ ### Fixed
1056
+
1057
+ - Fix step interrupting by Ctrl-C
1058
+
1059
+ ### Changed
1060
+
1061
+ - Disable `SendDMail` tool in Kimi Koder agent
1062
+
1063
+ ## 0.28 (2025-10-13)
1064
+
1065
+ ### Added
1066
+
1067
+ - Add `/init` meta command to analyze the codebase and generate an `AGENTS.md` file
1068
+ - Add `/clear` meta command to clear the context
1069
+
1070
+ ### Fixed
1071
+
1072
+ - Fix `ReadFile` output
1073
+
1074
+ ## 0.27 (2025-10-11)
1075
+
1076
+ ### Added
1077
+
1078
+ - Add `--mcp-config-file` and `--mcp-config` options to load MCP configs
1079
+
1080
+ ### Changed
1081
+
1082
+ - Rename `--agent` option to `--agent-file`
1083
+
1084
+ ## 0.26 (2025-10-11)
1085
+
1086
+ ### Fixed
1087
+
1088
+ - Fix possible encoding error in `--output-format stream-json` mode
1089
+
1090
+ ## 0.25 (2025-10-11)
1091
+
1092
+ ### Changed
1093
+
1094
+ - Rename package name `ensoul` to `kimi-cli`
1095
+ - Rename `ENSOUL_*` builtin system prompt arguments to `KIMI_*`
1096
+ - Further decouple `App` with `Soul`
1097
+ - Split `Soul` protocol and `KimiSoul` implementation for better modularity
1098
+
1099
+ ## 0.24 (2025-10-10)
1100
+
1101
+ ### Fixed
1102
+
1103
+ - Fix ACP `cancel` method
1104
+
1105
+ ## 0.23 (2025-10-09)
1106
+
1107
+ ### Added
1108
+
1109
+ - Add `extend` field to agent file to support agent file extension
1110
+ - Add `exclude_tools` field to agent file to support excluding tools
1111
+ - Add `subagents` field to agent file to support defining subagents
1112
+
1113
+ ## 0.22 (2025-10-09)
1114
+
1115
+ ### Changed
1116
+
1117
+ - Improve `SearchWeb` and `FetchURL` tool call visualization
1118
+ - Improve search result output format
1119
+
1120
+ ## 0.21 (2025-10-09)
1121
+
1122
+ ### Added
1123
+
1124
+ - Add `--print` option as a shortcut for `--ui print`, `--acp` option as a shortcut for `--ui acp`
1125
+ - Support `--output-format stream-json` to print output in JSON format
1126
+ - Add `SearchWeb` tool with `services.moonshot_search` configuration. You need to configure it with `"services": {"moonshot_search": {"api_key": "your-search-api-key"}}` in your config file.
1127
+ - Add `FetchURL` tool
1128
+ - Add `Think` tool
1129
+ - Add `PatchFile` tool, not enabled in Kimi Koder agent
1130
+ - Enable `SendDMail` and `Task` tool in Kimi Koder agent with better tool prompts
1131
+ - Add `ENSOUL_NOW` builtin system prompt argument
1132
+
1133
+ ### Changed
1134
+
1135
+ - Better-looking `/release-notes`
1136
+ - Improve tool descriptions
1137
+ - Improve tool output truncation
1138
+
1139
+ ## 0.20 (2025-09-30)
1140
+
1141
+ ### Added
1142
+
1143
+ - Add `--ui acp` option to start Agent Client Protocol (ACP) server
1144
+
1145
+ ## 0.19 (2025-09-29)
1146
+
1147
+ ### Added
1148
+
1149
+ - Support piped stdin for print UI
1150
+ - Support `--input-format=stream-json` for piped JSON input
1151
+
1152
+ ### Fixed
1153
+
1154
+ - Do not include `CHECKPOINT` messages in the context when `SendDMail` is not enabled
1155
+
1156
+ ## 0.18 (2025-09-29)
1157
+
1158
+ ### Added
1159
+
1160
+ - Support `max_context_size` in LLM model configurations to configure the maximum context size (in tokens)
1161
+
1162
+ ### Improved
1163
+
1164
+ - Improve `ReadFile` tool description
1165
+
1166
+ ## 0.17 (2025-09-29)
1167
+
1168
+ ### Fixed
1169
+
1170
+ - Fix step count in error message when exceeded max steps
1171
+ - Fix history file assertion error in `kimi_run`
1172
+ - Fix error handling in print mode and single command shell mode
1173
+ - Add retry for LLM API connection errors and timeout errors
1174
+
1175
+ ### Changed
1176
+
1177
+ - Increase default max-steps-per-run to 100
1178
+
1179
+ ## 0.16.0 (2025-09-26)
1180
+
1181
+ ### Tools
1182
+
1183
+ - Add `SendDMail` tool (disabled in Kimi Koder, can be enabled in custom agent)
1184
+
1185
+ ### SDK
1186
+
1187
+ - Session history file can be specified via `_history_file` parameter when creating a new session
1188
+
1189
+ ## 0.15.0 (2025-09-26)
1190
+
1191
+ - Improve tool robustness
1192
+
1193
+ ## 0.14.0 (2025-09-25)
1194
+
1195
+ ### Added
1196
+
1197
+ - Add `StrReplaceFile` tool
1198
+
1199
+ ### Improved
1200
+
1201
+ - Emphasize the use of the same language as the user
1202
+
1203
+ ## 0.13.0 (2025-09-25)
1204
+
1205
+ ### Added
1206
+
1207
+ - Add `SetTodoList` tool
1208
+ - Add `User-Agent` in LLM API calls
1209
+
1210
+ ### Improved
1211
+
1212
+ - Better system prompt and tool description
1213
+ - Better error messages for LLM
1214
+
1215
+ ## 0.12.0 (2025-09-24)
1216
+
1217
+ ### Added
1218
+
1219
+ - Add `print` UI mode, which can be used via `--ui print` option
1220
+ - Add logging and `--debug` option
1221
+
1222
+ ### Changed
1223
+
1224
+ - Catch EOF error for better experience
1225
+
1226
+ ## 0.11.1 (2025-09-22)
1227
+
1228
+ ### Changed
1229
+
1230
+ - Rename `max_retry_per_step` to `max_retries_per_step`
1231
+
1232
+ ## 0.11.0 (2025-09-22)
1233
+
1234
+ ### Added
1235
+
1236
+ - Add `/release-notes` command
1237
+ - Add retry for LLM API errors
1238
+ - Add loop control configuration, e.g. `{"loop_control": {"max_steps_per_run": 50, "max_retry_per_step": 3}}`
1239
+
1240
+ ### Changed
1241
+
1242
+ - Better extreme cases handling in `read_file` tool
1243
+ - Prevent Ctrl-C from exiting the CLI, force the use of Ctrl-D or `exit` instead
1244
+
1245
+ ## 0.10.1 (2025-09-18)
1246
+
1247
+ - Make slash commands look slightly better
1248
+ - Improve `glob` tool
1249
+
1250
+ ## 0.10.0 (2025-09-17)
1251
+
1252
+ ### Added
1253
+
1254
+ - Add `read_file` tool
1255
+ - Add `write_file` tool
1256
+ - Add `glob` tool
1257
+ - Add `task` tool
1258
+
1259
+ ### Changed
1260
+
1261
+ - Improve tool call visualization
1262
+ - Improve session management
1263
+ - Restore context usage when `--continue` a session
1264
+
1265
+ ## 0.9.0 (2025-09-15)
1266
+
1267
+ - Remove `--session` and `--continue` options
1268
+
1269
+ ## 0.8.1 (2025-09-14)
1270
+
1271
+ - Fix config model dumping
1272
+
1273
+ ## 0.8.0 (2025-09-14)
1274
+
1275
+ - Add `shell` tool and basic system prompt
1276
+ - Add tool call visualization
1277
+ - Add context usage count
1278
+ - Support interrupting the agent loop
1279
+ - Support project-level `AGENTS.md`
1280
+ - Support custom agent defined with YAML
1281
+ - Support oneshot task via `kimi -c`