Kimi Code CLI 的 `kimi acp` 子命令全解析:ACP 协议能力矩阵、方法覆盖与源码实现

发布时间:2026/9/28 9:05:06
Kimi Code CLI 的 `kimi acp` 子命令全解析:ACP 协议能力矩阵、方法覆盖与源码实现 AI Agent代码智能体人工智能大模型CLI【免费下载链接】kimi-codeKimi Code CLI — The Starting Point for Next-Gen Agents项目地址https://gitcode.com/gh_mirrors/ki/kimi-code点击查看免费下载kimi acp把 Kimi Code CLI 切换为ACPAgent Client Protocol模式在标准输入/输出上以 JSON-RPC 与 ACP 客户端如 Zed、JetBrains AI Chat、Paseo对话让 IDE 直接驱动 kimi 的会话、prompt 与工具调用。本文以官方参考文档为核心骨架结合仓库中packages/acp-server的源码与测试逐项解析initialize能力矩阵、全部 ACP 方法覆盖、MCP 转发规则与鉴权机制帮助你理解并正确配置、排查 ACP 接入过程中的每一个环节。kimi acp是什么在标准输入/输出上运行的 ACP serverkimi acp是一个标准输入/输出上的 ACP server 入口启动方式极简kimi acp启动后命令不会打印任何 banner而是立刻等待 ACP 客户端在 stdin 上发出initialize请求。日志统一写到标准错误stderr以及~/.kimi-code/logs/下的诊断日志——这样做是为了保证 stdout 这个 ACP 协议通道始终“干净”不被任何业务输出污染。这一点在启动组合根 packages/acp-server/src/start.ts 中由redirectConsoleToStderr()强制保证它把全局的console.log/info/warn/debug全部重定向到 stderr任何依赖库的“乱写”都不会破坏协议流。谁会调用它你通常不需要手动跑kimi acp——这个命令是给 IDE 的子进程入口准备的。IDE 端的配置见在 IDE 中使用。每次 IDE 创建会话时CLI 会复用已有的鉴权状态不需要重复登录。CLI 层的实现细节子命令实现在 apps/kimi-code/src/cli/sub/acp.ts要点如下--login参数使命令进入设备码登录流程后直接退出这是 ACP 客户端通过一等AuthMethodTerminal路径命中登录的入口客户端会按authMethods[0].args里广告的[--login]重新唤起 agent 二进制。--region region与--login搭配使用取值为mainland-cnkimi.com或globalkimi.ai。KIMI_CODE_HOME转发若环境变量已设置会被转发进authMethods[0].env保证登录子进程把 token 写到 ACP server 读取的同一个数据根目录下。旧式兼容process.argv[1]当前二进制绝对路径被广告为_meta[terminal-auth].command供尚未支持一等字段的旧客户端直接 spawn。懒加载moonshot-ai/acp-server通过动态import()加载解析 CLI 时不会初始化 ACP 引擎。在 start.ts 的组合根中bootstrap()构建 DI × Scope 引擎agent-core-v2再在其上创建内存传输的Klientfacade所有 ACP 方法处理器都通过这个 facade 驱动引擎会话元数据、wire 记录、blob 与会话索引会持久化到磁盘。initialize 握手版本协商、agentInfo 与鉴权方法ACP 会话的第一步是客户端发出initializeserver 返回agentInfo、能力矩阵与authMethods。版本协商协议版本协商实现在 packages/acp-server/src/version.ts第 18-22 行当前协商整数protocolVersion: 1对应规范标签v0.10.x、npm SDK 版本0.23.0negotiateVersion()返回“不超过客户端请求版本的最高服务器支持版本”客户端若请求更新的主版本如 99仍会得到当前版本 1客户端低于MIN_PROTOCOL_VERSION1时服务器照样返回自己的当前版本由客户端决定是否断开。initialize.test.ts 中的测试覆盖了这三种协商分支其中“客户端广告 99 → 响应仍为 1”的用例验证了向下兼容策略。agentInfo 与 authMethodsagentInfo为{ name: Kimi Code CLI, version }version来自 CLI 自身的版本号见 apps/kimi-code/src/cli/sub/acp.ts 中agentInfo: { name: Kimi Code CLI, version: getVersion() }。authMethods采取双路径广告见 packages/acp-server/src/auth-methods.ts一等type: terminalACP 0.23 起id: login、args: [--login]客户端重新唤起 agent 二进制执行登录旧式_meta[terminal-auth]回退形如{ command, args: [login], env, label }供尚未支持一等字段的客户端例如未开启AcpBetaFeatureFlag的 Zed、当前的 JetBrains 插件直接 spawn。大多数客户端走路径 1路径 2 目前仍是 Zed 的必需品。能力矩阵agentCapabilities 逐项说明下表列出 ACP server 声明的能力。agentCapabilities字段在initialize响应里完整返回源码见 packages/acp-server/src/server.ts 第 201-225 行IDE 端可据此调整 UI能力取值说明loadSessiontrue支持session/load续接已有会话加载时会同步回放历史promptCapabilities.imagetrue支持 ACPimage内容块base64 mimeTypepromptCapabilities.audiofalse暂不支持音频 promptpromptCapabilities.embeddedContexttrue客户端可发送resource/resource_link嵌入式资源块文本内容会以resource uri....../resource形式注入 promptblob 资源被丢弃并写 warnsessionCapabilities.list{}支持session/list枚举当前用户的会话sessionCapabilities.resume{}支持session/resume重新挂接会话不回放历史sessionCapabilities.close{}支持session/close拆除存活中的会话sessionCapabilities.delete{}支持session/delete永久删除会话sessionCapabilities.fork{}支持session/fork从已有会话分叉sessionCapabilities.additionalDirectories{}额外工作目录仅在session/new时生效mcpCapabilities.httptrue转发 IDE 配置的 HTTP MCP 服务mcpCapabilities.ssetrue转发 IDE 配置的旧式 SSE MCP 服务auth.logout{}支持 ACPlogout丢弃托管供应商的 token几个能力点与源码的对应关系图片 promptacpBlocksToContentParts见 packages/acp-server/src/convert.ts把 ACPimage块拼成data:image/...;base64,...的image_url再经compressPromptImageParts做输入阶段压缩超大图按长边缩边、重编码并持久化原始图到会话的 media-originals 目录供模型通过 ReadMediaFile region 读取细节。embeddedContext文本类resource包装为resource uri....../resource注入 prompturi 属性做了最小 XML 转义resource_link若指向file:URI 会进一步投影为带行号范围的文本引用如path/to/file.ts:12-30blob 资源一律丢弃并写 warn。additionalDirectories仅在session/new生效源码中标注了 KLIENT-GAP——引擎只在会话创建时合并额外根目录workspaceDirs.mergeAdditionalDirsload/resume/fork收到该字段只会记一条 warn 日志warnIgnoredAdditionalDirs见 server.ts 第 654-659 行。ACP 方法覆盖全景在agentclientprotocol/sdk1.x中ACP 方法按命名空间组织core与session覆盖主 agent 流程providers、nesinline-edit 预测与document缓冲区同步是可选扩展面客户端侧的 reverse-RPC 方法则分组在session、fs、terminal与elicitation下。概览ACP server 实现了全部 core3/3与 session11/11agent 侧方法、10/11 客户端 reverse-RPC 方法以及session/set_model扩展方法。未实现providers/*、nes/*、document/*与elicitation/complete——对这些方法的请求一律返回methodNotFound。方法的路由表由 packages/acp-server/src/server.ts 末尾的createAcpAgentApp()统一注册SDK 的agent()builder onRequest/onNotification未注册的方法由连接层直接以method_not_found-32601应答。core agent 侧 — IDE → agent3 / 3方法状态说明initialize是版本协商返回agentInfo: { name: Kimi Code CLI, version }、能力矩阵、authMethods一等type:terminal加旧式_meta[terminal-auth]回退authenticate是校验method_idlogintoken 缺失返回authRequired (-32000)未知 id 返回invalidParams (-32602)logout是丢弃托管供应商的 token后续受限调用会再次返回auth_requiredauthenticate的校验逻辑methodId ! login直接抛invalidParams随后重新执行鉴权门ensureAuthed()token 缺失时抛authRequired。logout则通过klient.global.auth.logout()丢弃托管供应商的 token同时注销托管配置由于鉴权门在每次受限调用时都重新派生自auth.summarize()下一次受限调用会自然再次命中auth_required。session agent 侧 — IDE → agent11 / 11方法状态说明session/new是接受cwd/mcpServers/additionalDirectories返回sessionIdconfigOptions[]modessession/load是恢复磁盘会话在响应返回前把历史以session/update同步回放session/resume是session/load的轻量兄弟方法跳过历史回放session/list是枚举磁盘会话可按cwd过滤session/fork是从源会话分叉请求上的cwd/additionalDirectories/mcpServers会被忽略并写 warnsession/close是尽力拆除中断进行中的 turn、释放会话级资源并关闭存活会话未知 id 不算错误session/delete是永久删除会话及其持久化数据未知 id 返回invalidParams (-32602)session/prompt是接受text/image/resource/resource_link内容块流式输出agent_message_chunksession/cancel是中断当前 turn针对 prompt 的 JSON-RPC$/cancel_request走同一条取消路径session/set_mode是校验modeId与set_config_option({configId:mode})走同一个模式切换session/set_config_option是统一的 model / thinking / mode picker 分发客户端 reverse-RPC — agent → IDE10 / 11方法状态说明session/update是流式推送agent_message_chunk/tool_call*/plan/config_option_update/available_commands_updatesession/request_permission是工具审批和问题提问共用此通道fs/read_text_file是客户端声明fsCapabilities时引擎的文件读取路由到客户端fs/write_text_file是引擎的文件写入路由到客户端terminal/create·output·release·kill·wait_for_exit是客户端声明clientCapabilities.terminal时shell 执行通过 reverse-RPC 交给客户端elicitation/create是客户端声明elicitation.form时ask-user 问题走原生表单RPC 失败回退session/request_permissionelicitation/complete否扩展方法方法状态说明session/set_model是从 ACP 0.23 不稳定面保留下来的扩展方法等价于set_config_option({configId:model})session/set_model由createAcpAgentApp()以自定义方法注册自带手写参数解析器parseSetSessionModelParams校验{ sessionId, modelId }均为字符串非法时抛invalidParams。上述未列出的方法一律返回methodNotFound。关键方法的源码级解读session/new会话创建session/new接受cwd/mcpServers/additionalDirectories经klient.global.sessions.create()由引擎铸造会话 id 并隐式注册工作区ACPmcpServers被转换为引擎的 name-keyed 记录后作为临时、仅本会话生效的 MCP server 注入连接后不持久化。响应统一为sessionIdconfigOptions[]modes。session/load 与 session/resume历史回放 vs 轻量挂接session/load是两者中唯一回放历史的方法loadSession在响应 settle之前调用acpSession.replayHistory()把持久化历史按序批量推送为session/update通知逐条 await 保证顺序客户端在收到 load 响应前就能重渲染先前的 turn。session/resume则按 ACP 规范刻意跳过回放是session/load的轻量兄弟方法。两者的共同实现resumeAcpSession在会话 id 不存在时映射为invalidParams (-32602)。session/prompt内容块转换、流式输出与取消session/prompt接受text/image/resource/resource_link内容块convert.ts 中的acpBlocksToContentParts提交前先做图片压缩引擎侧事件流assistant.delta、thinking.delta、tool.call.*、turn.ended等经 events-map.ts 的映射助手翻译为 ACPsession/update通知流式推送agent_message_chunk/tool_call*/plan等。回合在turn.ended事件上结算返回stopReason忙碌turn.agent_busy映射为invalidRequest (-32600)鉴权类失败映射为auth_required其余内部错误统一为固定文案的internalError (-32603)原始堆栈只进日志、绝不跨协议通道泄漏见 session.ts 的mapPromptLaunchError。取消有两条等价路径session/cancel通知以及针对该 prompt 请求的 JSON-RPC$/cancel_request后者通过 app-API 的每请求 abort signal 汇入同一条取消路径见 server.ts 第 409-435 行。取消在 turn id 未知时会做延迟补偿id 落地后重发精确寻址的取消未启动的回合则以stopReason: cancelled结算。压缩阶段到达的取消还会翻转pendingPromptAborts标记使 prompt 直接以 cancelled 结算、不启动回合。session/close 与 session/delete清理语义的差异session/close是尽力而为的清理中断进行中的 turn、释放交互桥与事件订阅等会话级资源、请求引擎销毁存活会话作用域。未知或已关闭的会话 id不算错误——close 是清理操作对非存活会话的关闭本就是 no-op。session/delete是明确的破坏性操作先关闭存活会话再删除持久化数据与索引条目并拆除本地 ACP 状态。未知 id 映射为invalidParams (-32602)因为客户端要求删除的是一个明确列出的会话。模式切换4 种 ACP modesession/set_mode与session/set_config_option({configId:mode})共享同一套模式源packages/acp-server/src/modes.ts第 22-43 行modeId名称说明defaultDefault手动审批工具正常执行planPlan只读规划不执行工具autoAuto自动批准安全操作yoloYOLO自动批准一切每个 ACP mode 映射为引擎的两个底层开关plan 模式IAgentPlanService进入/退出与 permission 模式IAgentPermissionModeService.setMode映射表acpModeToToggles用穷举 switch 保证类型安全——新增第 5 种 mode 而不扩展该表会直接触发编译错误。session/set_config_option是统一的 model / thinking / mode picker 分发model走setModel兼容旧客户端id,thinking合并写法裸 id 不会关闭 thinkingthinking按当前模型声明的能力做校验支持 effort 分级时允许集合为off 各级 effortalways_thinking模型去掉offmode走模式切换非法值一律invalidParams。MCP 转发http / stdio / sse / acpACP 客户端在session/new或session/load中提供mcpServers时ACP server 做如下转换源码见 packages/acp-server/src/convert.ts 的acpMcpServersToConfigRecordACPmcpServers条目转换目标说明httpkimi 的transport: http配置保留url与headers{name,value}数组 → recordstdiokimi 的transport: stdio配置保留command/args/envruntime_id: localACP 里type缺省即 stdiossekimi 的transport: sse配置保留url与headersacp丢弃并写一条 warn 日志不稳定的 ACP 传输不受支持转换后的 MCP 配置作为临时会话级server 注入引擎仅本会话连接绝不持久化因此session/fork不会携带源会话的临时 MCP server——这正是 fork 忽略mcpServers字段的原因之一。鉴权与会话安全authenticate、logout 与 auth 门每次受限方法调用前都会过ensureAuthed()server.ts 第 626-646 行采用双保险策略主探针klient.global.auth.ensureReady()——配置文件的 apiKey、provider 环境变量凭据、OAuth token 都算作可用与模型实际使用方式一致单看 OAuth 的summarize()视野过窄回退任何已登录的 OAuth provider 都算作已鉴权两者都不满足时抛RequestError.authRequired()。authenticate(login)是客户端完成终端登录后的确认回调成功体为空的voidlogout丢弃托管 token 后无需额外状态下一次受限调用自然再次返回auth_required。测试场景可通过AcpServerOptions.disableAuth绕过鉴权门生产 ACP 宿主应保持false让未鉴权客户端在创建会话前就得到结构化的auth_required。交互桥接工具审批与提问引擎的审批门AgentPermissionGate与 ask-user 问题工具会把请求停在进程全局的 interaction kernel 上并阻塞等待响应。ACP 侧由 packages/acp-server/src/interaction-bridge.ts 的AcpInteractionBridge做边缘桥接它订阅会话的interactions.changed事件对每个新挂起的approval/question交互调用session/request_permission把响应经 approval.ts / question.ts 的纯映射函数转换后通过session.interactions.respond(id, ...)解除内核阻塞。若客户端在initialize声明了elicitation.formask-user 问题优先走elicitation/create原生多问题表单RPC 失败时回退到request_permission单选框桥。fs 与 terminal reverse-RPC把文件 IO 与 Shell 执行交给客户端文件系统客户端声明fsCapabilities后引擎的文件读取/写入经 ACP-backed 的IHostFileSystempackages/acp-server/src/acp-fs路由到fs/read_text_file/fs/write_text_file反向调用initialize时通过IAcpConnection.bindFsCapabilities(...)绑定。终端客户端声明clientCapabilities.terminal时Bash 执行交给terminal/create等 reverse-RPCpackages/acp-server/src/acp-terminal.ts。会话侧会把新建的客户端终端与在飞的 Bash 工具调用按 shell 命令后缀做关联工具卡片以{type: terminal}嵌入代替文本输出字节已在终端面板渲染卡片去重不重复展示而模型仍收到完整捕获输出。测试与工程保障packages/acp-server的测试从握手到完整回合层层覆盖initialize.test.ts验证negotiateVersion三分支、真实引擎启动后的initialize响应能力矩阵、版本协商降级以及terminal-auth的 env 转发与_meta回退形态。e2e-turn.test.ts启动完整agent-core-v2 引擎与真实 ACP wireND-JSON 内存流走通initialize → session/new → session/prompt用 scripted provider 伪造 LLM 网络调用真实演练回合循环、assistant.delta→session/update翻译与回合结算终端能力测试还挂载了真实 stdio MCP fixture server 与模拟的terminal/*客户端。此外 start.ts 的redirectConsoleToStderr是协议通道不被污染的第一道防线close()的关闭顺序先 detach klient 事件订阅、flush append-log、排空会话元数据写入与索引镜像保证干净关机不丢已持久化操作。IDE 集成与故障排查ACP 的实际落地场景是 IDE 子进程Zed 在~/.config/zed/settings.json的agent_servers里以type: customcommand: kimiargs: [acp]注册JetBrains 系列在 AI 聊天面板的 Configure ACP agents 中添加相同配置command务必用which kimi查到的绝对路径因为 GUI 子进程通常不继承终端 PATHPaseo 则在其 ACP provider 目录中选择或自定义[kimi, acp]。完整的分步配置见在 IDE 中使用。常见故障与排查要点会话立刻被中断 / IDE 提示 agent exited多半是command路径不对或未登录。先在终端跑一次kimi acp验证——若阻塞等待标准输入则 CLI 正常问题在 IDE 配置若立刻报错则按提示处理多数与登录有关。IDE 显示 auth required说明 CLI 没有可用鉴权令牌。退出 IDE在终端执行kimi完成登录后再启动 IDE。MCP 工具看不到对照上文的能力矩阵确认 IDE 配置的 MCP 传输类型。当前 ACP server 支持http、stdio、sse三种acp传输的 MCP server 会被静默丢弃并在日志中给出 warn。下一步在 IDE 中使用 — Zed / JetBrains / Paseo 配置步骤和故障排查kimi 命令参考 — 完整子命令列表赞分享AI Agent代码智能体人工智能大模型CLI【免费下载链接】kimi-codeKimi Code CLI — The Starting Point for Next-Gen Agents项目地址https://gitcode.com/gh_mirrors/ki/kimi-code点击查看免费下载相关推荐ZXPInstaller终极指南Adobe扩展一键安装的简单解决方案ZXPInstaller终极指南Adobe扩展一键安装的简单解决方案 作为设计师或创意工作者你是否曾遇到过这样的困境找到了心仪的Adobe扩展插件下载了AI Agent代码智能体人工智能大模型CLIkimi-cli ACP 集成架构解析从协议握手到会话流式传输的完整实现指南kimi cli ACP 集成架构解析从协议握手到会话流式传输的完整实现指南 导读 本文以 kimi cli 仓库中 ACP 集成说明 https://lin人工智能AI Agent代码智能体交互助手CLI工具调用kimi term 子命令详解用 Toad 终端 UI 驾驭 Kimi Code CLIkimi term 子命令详解用 Toad 终端 UI 驾驭 Kimi Code CLI kimi term 是 Kimi Code CLI 的图形化终端入口人工智能AI Agent代码智能体交互助手CLI工具调用上一篇Mall4j电商系统5分钟快速上手完整指南下一篇claude-skills 实战指南Next.js App Router 下 React Server Components 的完整架构与模式创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询