跳到正文

Provider 与接入方式 ​

在 C2 中,Provider 指由 C2 通过 Agent Client Protocol(ACP) 驱动的编程智能体 CLI。 C2 不会重新实现智能体,也不代理模型访问;它只在本机启动 CLI 或 ACP 适配器子进程,并通过 stdin/stdout 交换 JSON-RPC 消息。

身份验证、订阅、配额、可用模型和费用仍由对应 Provider 管理。开始真实会话前,请先安装并登录相应 CLI。

“支持”具体意味着什么 ​

每个内置 Provider 都有固定的 ID 和启动配置。为会话选择 Provider 后,C2 会:

  1. 检查启动命令是否能从 PATH 中找到;
  2. 在本机启动原生 ACP 端点或适配器;
  3. 初始化 ACP 会话,并把编译后的文档作为提示词发送;
  4. 在 Provider 实际提供对应能力时,把文本流、工具调用、权限请求、计划、终端更新和任务结束状态转换为统一的 C2 Event。

“支持”不代表所有 Provider 都暴露完全相同的模型和 ACP 能力。C2 只显示当前 ACP 端点真实上报的内容,不会伪造能力一致性。

十一个内置 Provider ​

Provider接入方式C2 启动命令前置要求
Claude CodeACP 适配器npx -y @agentclientprotocol/claude-agent-acpNode,以及已完成身份验证的 Claude Code 环境
CodexApp Server ACP 适配器npx -y @agentclientprotocol/[email protected]Node,以及本地 Codex runtime/登录状态
Grok原生 ACPgrok agent stdio已登录的 grok CLI,并位于 PATH 中
CursorCLI 内置 ACP 模式cursor-agent acp已登录的 cursor-agent,并位于 PATH 中
OpenCode 1CLI 内置 ACP 模式opencode acp已登录的 opencode,并位于 PATH 中
OpenCode 2(Beta)CLI 内置 ACP 模式opencode2 acp已登录的 opencode2 beta,并位于 PATH 中
Pi社区 ACP 适配器npx -y pi-acpNode;pi 位于 PATH 中以读取配置和凭据
Kimi原生 ACPkimi acp已登录的 kimi CLI,并位于 PATH 中
ZCode(GLM)GLM ACP 智能体npx -y glm-acp-agentNode,加 Z_AI_API_KEY 或一次性 --setup
AmpACP 适配器npx -y amp-acpNode,以及已登录并位于 PATH 中的 amp
Droid原生 ACPdroid exec --output-format acp已登录的 droid CLI,并位于 PATH 中

原生 ACP ​

Grok、Kimi 和 Droid 直接提供 ACP 端点,因此 C2 无需 Node 适配器即可启动它们。

CLI 内置 ACP 模式 ​

Cursor 和两个 OpenCode 版本都通过自身 CLI 的 ACP 模式接入。OpenCode 2 使用独立的 opencode2 二进制与 V1 并存,不会替换 opencode,因此 C2 也把二者作为独立 Provider。 Beta 的安装与迁移边界见 OpenCode 2 官方文档。

适配器接入 ​

Claude Code、Codex、Pi、ZCode(GLM) 和 Amp 通过 npx 启动。Pi 与 Amp 使用社区适配器。GLM 项启动的是 GLM ACP 智能体,而不是 ZCode 桌面应用;后者自身是 ACP 客户端,不能作为 C2 驱动的 CLI。

GLM 可以通过环境变量提供 Z_AI_API_KEY,也可以先运行:

sh
npx -y glm-acp-agent --setup

添加自定义 ACP Agent ​

打开 设置 → Provider → 添加 ACP Agent,填写稳定的小写 ID、显示名称、可执行程序名或绝对 路径,并按需填写启动参数(每行一个)和需要转发的宿主环境变量名。C2 只保存环境变量名;变量 当前值仍由宿主进程持有,只会在启动 Agent 时复制给子进程。

该命令必须通过 stdin/stdout 提供 ACP Server。C2 会直接启动可执行程序,不经过 shell,因此 不要在命令输入框中填写管道或“命令 + 空格分隔参数”;请把每个参数单独放在一行。添加 Agent 时不会立即运行它;只有使用该 Provider 的会话发送第一条提示词时,C2 才会启动进程。

自定义 Agent 复用与内置 Provider 相同的会话、权限协调、转录记录、MCP 挂载和 ACP 能力协商。 C2 不会预设它支持某些模型、原生子代理、自动安装或 Provider 专属能力。Agent 自己负责凭据、 账户、网络行为和费用。从设置中移除只会删除 C2 的启动定义,不会删除历史会话或 Agent 自己的 文件。

Provider 原生子代理 ​

C2 不会自行调度子代理。只有当前原生运行时或适配器已经确认提供 Agent/Task 委派工具时, 插件子代理块才会发送给 Provider:Claude Code、Codex、Cursor、OpenCode 1/2、Kimi、Amp 和 Droid。它们的标准 ACP 工具调用事件直接进入现有只读 Agents roster;Cursor 官方定义的 cursor/task 完成通知只在 ACP 接入层做一次标准化。

Grok、Pi、ZCode 和自定义 Provider 收到含插件子代理的 prompt 时,会在 turn 被接受前直接 失败;C2 不会把 specialist 指令悄悄交给主 Agent 内联执行。

可用状态与身份验证 ​

C2 会为每个内置 Provider 显示健康状态:

  • 绿点表示注册的启动命令可以从 PATH 中找到;
  • 缺失表示 C2 找不到该命令;
  • 如果新会话选择了缺失命令,编辑器会在运行前给出警告。

这个检查有意保持窄范围:它不能证明凭据有效、账户仍有配额,或适配器包可以成功下载。对于通过适配器接入的 Provider,绿点主要说明 npx 可用。

模型与 Provider 专属能力 ​

如果 ACP 端点在 session/new 阶段上报模型,C2 会显示模型控件,并在切换时发送 session/set_model。如果端点没有上报模型列表,模型仍由 Provider 自己的 CLI 配置决定。

OpenCode 2 会通过 ACP 配置项上报当前项目/账户的模型目录与模型专属 variant。C2 直接使用这些 实时值(包括 thought_level),不会假定固定的思考等级。

计划、斜杠命令、MCP 工具、图片、浏览器/计算机控制等能力也遵循相同边界:是否可用取决于 Provider、适配器版本和宿主运行时。出现在上表中,不代表它自动拥有所有可选能力。

统一的 ACP 循环 ​

九个 Provider 最终都会进入同一条核心链路:

text
initialize → session/new → session/prompt → stream session/update
           → answer session/request_permission → read StopReason

正是这层统一传输,让桌面端和远程客户端可以共享与 Provider 无关的会话与事件模型。

支持 MCP 的 Provider 可以在会话开始时接收额外工具。C2 的 MCP Server 来自 MCP Skill;完整说明见技能文档(英文)和市场(英文)。

基于 Apache-2.0 许可证开源。