Skip to content

kiki acp 子命令 ​

kiki acp 把 Kiki 切换到 ACP (Agent Client Protocol) 模式:在标准输入/输出上以 JSON-RPC 形式与 ACP 客户端(如 Zed、JetBrains AI Chat 等)对话,让 IDE 直接驱动 kiki 的会话、prompt 与工具调用。

sh
kiki acp

启动后命令不会打印任何 banner,立刻等待 ACP 客户端在 stdin 上发出 initialize 请求。日志会写到标准错误(以及 ~/.kiki/logs/ 下的诊断日志),所以 ACP 通道本身保持干净。

谁会调用它?

你通常不需要手动跑 kiki acp——这个命令是给 IDE 的子进程入口准备的。IDE 端的配置见在 IDE 中使用。

能力矩阵 ​

下表列出当前 ACP 适配层声明的能力。agentCapabilities 字段在 initialize 响应里完整返回,IDE 端可据此调整 UI。

能力取值说明
promptCapabilities.imagetrue支持 ACP image 内容块(base64 + mimeType)
promptCapabilities.audiofalse暂不支持音频 prompt
promptCapabilities.embeddedContexttrue客户端可发送 resource/resource_link 嵌入式资源块,文本内容会以 <resource uri="...">...</resource> 形式注入 prompt;blob 资源被丢弃并写 warn
mcpCapabilities.httptrue转发 IDE 配置的 HTTP MCP 服务
mcpCapabilities.ssetrue转发 IDE 配置的旧式 SSE MCP 服务
loadSessiontrue支持 session/load 续接已有会话,加载时会同步回放历史
sessionCapabilities.list{}支持 session/list 枚举当前用户的会话

ACP 方法覆盖 ​

规范把方法分为稳定面和仍在演化的不稳定面,因此分开列出。任何正常 agent 流程所需的方法——initialize → auth → new/load/resume → prompt → cancel,加上文件 I/O 与工具审批——都已实现。

稳定面 agent-side — IDE → agent ​

方法状态说明
initialize是版本协商;返回 agentInfo: { name: 'Kiki', version }、能力矩阵、authMethods
authenticate是校验 method_id='login';token 缺失返回 authRequired (-32000),未知 id 返回 invalidParams (-32602)
session/new是接受 cwd / mcpServers,返回 configOptions[]
session/load是恢复磁盘会话并把历史以 session/update 同步回放
session/resume是session/load 的轻量兄弟方法,跳过历史回放
session/prompt是接受 text / image / resource / resource_link 内容块,流式输出 agent_message_chunk
session/cancel是中断当前 turn
session/list是枚举磁盘会话(通过 sessionCapabilities.list = {} 公告)
session/set_mode是兼容路径,与 set_config_option({configId:'mode'}) 走同一 dispatcher
session/set_config_option是统一的 model / thinking / mode picker 分发
session/close否
logout否

稳定面 client-side reverse-RPC — agent → IDE ​

方法状态说明
session/update是流式推送 agent_message_chunk / tool_call* / plan / config_option_update / available_commands_update
session/request_permission是工具审批和问题 elicitation 共用此通道
fs/read_text_file是文件读取由客户端执行:Kiki 不直接读你机器上的文件,而是通过该方法向 IDE 请求文件内容(通过 fsCapabilities 公告)
fs/write_text_file是文件写入由客户端执行:Kiki 通过该方法把内容交给 IDE 写入
terminal/create · output · release · kill · wait_for_exit否终端 reverse-RPC 未接,shell 命令走本地执行

不稳定面 ​

方法状态说明
session/set_model是兼容路径,等价于 set_config_option({configId:'model'})
其余方法否包括 session 生命周期扩展、缓冲区同步、inline-edit 预测、provider 管理等

上述未列出的方法一律返回 methodNotFound。

MCP 转发 ​

ACP 客户端在 session/new、session/load 或 session/resume 中提供 mcpServers 时,Kiki 按以下方式处理:

  • http → Kiki 的 transport: 'http' 配置
  • sse → Kiki 的 transport: 'sse' 配置
  • stdio(没有 type 的条目)→ 默认以 invalid_params 拒绝;不会创建或恢复会话
  • acp → 丢弃并写一条 warn 日志

如果 IDE 需要提交 stdio MCP 服务器,请在 IDE 的 ACP agent 配置中显式使用 kiki acp --allow-client-stdio-mcp 启动 Kiki。这表示信任 IDE 选择本地可执行文件和参数:这些 MCP 服务器会作为 Kiki 的子进程启动、继承 Kiki 的环境,不再单独触发 Bash 审批。只对可信的 IDE 及其 MCP 配置启用此选项。HTTP 和 SSE MCP 服务器不需要此选项。

外部 harness 中的 Kiki 工具 ​

上面的转发是入站连接:IDE 向 kiki acp 提供 MCP 服务器。Kiki 运行外部 harness 时,可以提供绑定到该 Kiki 会话和 Agent 的会话级工具桥。Adapter 必须接受 stdio MCP;OpenClaw 和 Pi 无法接收这个工具桥。模型设置、厂商登录和权限仍沿用 harness 自身配置,无需把受管工具桥的临时凭证复制到厂商配置中。

会话的能力清单会显示运行中 adapter 报告的认证状态。ACP 明确返回认证要求时,显示本会话需要认证;Codex 的账号更新按执行器报告显示,无法识别的认证模式保留为登录状态未知。悬停可查看协议来源、工作目录和观察时间。已保存的观察在会话关闭后仍可读取,执行绑定改变时清除;它们与设置中的连接检查分别显示。

在 [agent_executor_overrides.<executor-id>.defaults] 下设置 inject_kiki_mcp,作为引擎默认值。Profile 的 inject_kiki_mcp 优先于引擎默认,会话的 execution.overrides.inject_kiki_mcp 再覆盖 Profile。将会话值设为 null 即恢复继承。这些选择在下一次绑定生效,也适用于具名外部子 Agent;冷恢复保留已保存的选择。Agent 绑定 false 后,现有工具桥凭证也不能继续列出或调用其工具。

各层均未设置时,保留原有行为:兼容的子 Agent 获得其获准的原生工具,原样 main agent 只有请求上下文或委派能力时才获得桥。开启注入不会额外开放工具组;明确的 kiki_context: [] 和 allow_kiki_subagents: false 仍保持这些组关闭。

打开工具桥也不会授予绑定已经拒绝的工具。外部工具同时按厂商名和映射后的原生名检查时,每一份允许列表都须包含其中至少一个名字,拒绝其中任一名字都会阻止这次调用。

桥以 kiki_<原生工具名> 暴露工具,列目录和调用使用同一身份重新检查权限。子 Agent 获准的插件和 MCP 工具也走这条链,不通过第二条直接转发路径绕过策略。配置、父级通知与旧连接名称见 外部 main agent 的委派 和 外部 main agent 的 Kiki 上下文。MCP 连通不等于特定 adapter 接受图片或音频 prompt;输入能力仍以该 adapter 的实际合同为准。

下一步 ​