cli团队桥
一个MCP到ACP的桥接器,允许Claude Code(或任何MCP客户端)将任务委托给外部编码代理——Codex、Claude Code、Gemini、Qwen、Droid(Factory)和Ollama——通过 代理客户端协议.
受启发于 Claude代码代理团队 --用于协调多个Claude Code会话的内置实验功能。该项目将这一概念扩展到供应商边界,让您通过单个MCP到ACP桥来编排来自OpenAI、Anthropic、谷歌、阿里巴巴和本地模型(Ollama)的代理。
它的作用
这座桥位于你的AI编码助手和多个外部代理之间。你要求Claude Code“让codex审查这个项目”和桥梁:
- 生成ACP适配器过程(例如。
codex-acp,gemini --experimental-acp) - 初始化指向项目目录的ACP会话
- 将您的提示发送给代理
- 返回结果
所有代理都可以并发运行——每个代理都有自己独立的子进程。
支持的代理
| 代理 | 命令 | 默认模型 | 身份验证 |
|---|---|---|---|
| 法典 | codex-acp | gpt-5.3-codex | OAuth(codex login) |
| 克劳德密码 | claude-code-acp | opus | OAuth(claude login) |
| 双子座 | gemini --experimental-acp | gemini-3-pro | OAuth(gemini login) |
| 通义千问 | qwen --acp | coder-model | OAuth(qwen login) |
| 机器人 | droid-acp | custom:kimi-for-coding-[Kimi]-7 | OAuth(droid login) |
每个代理支持多种模型——请参见 配置 查看完整列表。Gemini和Qwen具有内置的ACP支持(不需要单独的适配器二进制文件)。
认证
每个代理CLI都使用自己的OAuth流。您在机器上为每个代理进行一次身份验证,桥接器使用这些存储的凭据-不会通过桥接器本身传递API密钥。
codex login # Authenticates with OpenAI — uses your OpenAI subscription
claude login # Authenticates with Anthropic — uses your Anthropic subscription
gemini login # Authenticates with Google — uses your Google AI subscription
qwen login # Authenticates with Alibaba Cloud — uses your Qwen subscription
droid login # Authenticates with Factory — uses your Factory subscription每个登录都在本地存储OAuth令牌(例如。 ~/.codex/, ~/.claude/, ~/.factory/).网桥生成直接读取这些令牌的代理进程——它本身从不处理凭据。您可以为每个提供商使用自己的订阅和配额。
Droid/Factory还支持通过中配置的API密钥进行自定义模型路由 ~/.factory/settings.json (例如Kimi、Ollama、LM工作室)。这些是由工厂管理的,而不是桥梁。
安全
看 docs/SECURITY.md 获取全面的安全文档,包括:
- 威胁模型和攻击媒介
- 文件系统IPC安全(.claude/bridge)
- 代理进程安全控制
- 权限策略引擎
- 部署强化建议
先决条件
- 包子 v1.2+
- 全局安装的ACP适配器二进制文件:
bun install -g @zed-industries/codex-acp@latest
bun install -g @zed-industries/claude-code-acp@latest
bun install -g droid-acp@latest- 底层CLI工具:
bun install -g @openai/codex@latest
bun install -g @anthropic-ai/claude-code@latest
bun install -g @factory/cli@latest- 带内置ACP的CLIs(无需适配器):
npm install -g @google/gemini-cli@latest
npm install -g qwen-code@latest- 每个代理通过其各自的流进行身份验证(
codex login,claude login,gemini login,qwen login,droid login)
安装
git clone https://github.com/Holovkat/cli-team-bridge.git
cd cli-team-bridge
bun install设置Claude代码
步骤1:启用代理团队(可选但推荐)
代理团队 是一个实验性的Claude Code功能,允许您协调多个Claude Code会话。虽然桥在没有它的情况下工作,但启用它可以让您将Claude到Claude的协调与跨供应商委托结合起来。
添加到您的克劳德代码设置(~/.claude/settings.json):
{
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
}
}或者在启动Claude Code之前在shell中设置它:
export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1步骤2:将网桥注册为MCP服务器
claude mcp add cli-team-bridge -- bun run /path/to/cli-team-bridge/src/index.ts --mode mcp --config /path/to/cli-team-bridge/bridge.config.local.json这会注册网桥,以便Claude Code可以调用其工具。MCP服务器在会话启动时加载,因此您需要启动 新建克劳德代码会话 添加后。
步骤3:验证它是否有效
启动一个新的Claude Code会话并尝试:
> List available agents from the bridge您应该看到所有已配置的代理及其模型和优势。
将代理团队与网桥结合使用
启用代理团队后,您可以让Claude Code生成队友,每个队友都使用网桥委派给不同的外部代理:
Create an agent team to review cli-team-bridge from different angles.
Have one teammate ask codex to do a code quality review,
another teammate ask gemini for a security audit,
and a third teammate ask droid for an error handling review.
Synthesize all findings when they're done.团队负责人协调克劳德的队友,每个队友都调用桥牌的MCP工具将工作分派给外部代理,结果通过团队反馈。
关键代理团队控制:
Shift+Up/Down--直接选择并向队友发送消息Shift+Tab--切换代理模式(仅引线坐标,无代码编辑)Ctrl+T--查看共享任务列表- 拆分窗格模式需要
tmux或iTerm2
看 代理团队文档 了解全部细节。
用法
这座桥有两种运行模式: 主控程序 (用于Claude Code集成)和 观察者 (基于文件的任务轮询)。
MCP模式(推荐)
开始a 新建克劳德代码会话 (在注册了上面的桥之后),然后使用自然语言:
> List available agents from the bridge
> Ask codex to review the code quality of cli-team-bridge
> Have droid do a security analysis of my-project
> Send all 5 agents to review cli-team-bridge concurrentlyClaude Code获得4个MCP工具:
| 工具 | 说明 |
|---|---|
list_agents | 列出可用的代理、其型号和优势 |
assign_task | 将任务发送给代理(立即返回任务ID) |
get_task_status | 轮询任务是否仍在运行 |
get_task_result | 任务完成后获取完整输出 |
观察者模式
作为守护进程运行,轮询任务目录中的JSON任务文件。适用于Docker部署或多进程设置。
bun run src/index.ts --team my-team --config bridge.config.local.json --mode watcher两种模式
bun run src/index.ts --team my-team --config bridge.config.local.json --mode bothCLI标志
| 标志 | 必填 | 默认 | 说明 |
|---|---|---|---|
--team | watcher/both | -- | 团队ID(在以下位置创建任务目录 ~/.claude/tasks//) |
--config | 没有 | ./bridge.config.json | 配置文件的路径 |
--mode | 没有 | both | mcp, watcher,或 both |
配置
提供了两个配置文件:
bridge.config.json--Docker/生产配置(相对于容器的路径)bridge.config.local.json--本地开发配置(指向您计算机的绝对路径)
配置结构
{
"workspaceRoot": "/Users/you/workspace", // Root dir containing your projects
"agents": {
"codex": {
"type": "acp",
"command": "codex-acp", // ACP adapter binary
"args": [],
"cwd": "/path/to/bridge", // Working directory for the adapter
"defaultModel": "gpt-5.3-codex",
"models": {
"gpt-5.3-codex": { "flag": "--model", "value": "gpt-5.3-codex" }
},
"strengths": ["code generation", "refactoring", "debugging"]
},
"claude-code": {
"type": "acp",
"command": "claude-code-acp",
"defaultModel": "opus",
"models": {
"opus": { "flag": "--model", "value": "opus" },
"sonnet": { "flag": "--model", "value": "sonnet" },
"haiku": { "flag": "--model", "value": "haiku" }
},
"strengths": ["architecture", "complex reasoning", "code review"]
},
"droid": {
"type": "acp",
"command": "droid-acp",
"defaultModel": "custom:kimi-for-coding-[Kimi]-7",
"models": {
"custom:kimi-for-coding-[Kimi]-7": {
"flag": "--model",
"value": "custom:kimi-for-coding-[Kimi]-7",
"provider": "factory"
}
// Add more Factory models as needed
},
"strengths": ["multi-model flexibility", "cost optimization", "custom model support"]
}
},
"permissions": { "autoApprove": true },
"polling": { "intervalMs": 2000 }, // Watcher polling interval
"logging": { "level": "info", "file": "./bridge.log" }
}添加新代理
- 向添加条目
agents配置文件中的对象 - 集
command到ACP适配器二进制名称 - 使用CLI标志定义可用模型
- 全局安装适配器二进制文件(`bun install -g
`)
示例:Ollama(通过Droid/Factory的本地模型)
Olama型号可以通过Droid/Factory适配器使用。首先,在Factory中将Olama模型配置为自定义模型(~/.factory/settings.json),然后使用以下命令在网桥配置中引用它们 custom: 前缀和 "provider": "factory".
步骤1:确保Olama在您的模型被拉出的情况下运行:
ollama serve # start the server
ollama pull nemotron-3-nano # pull a model步骤2:在工厂中配置模型(通过 droid CLI或 ~/.factory/settings.json).该模型显示的ID如下 custom:nemotron-3-nano-[Ollama]-37.
步骤3:将其添加到您的网桥配置中 droid 代理商型号:
"droid": {
"type": "acp",
"command": "droid-acp",
"args": [],
"cwd": "/path/to/bridge",
"defaultModel": "custom:kimi-for-coding-[Kimi]-7",
"models": {
"custom:kimi-for-coding-[Kimi]-7": { "flag": "--model", "value": "custom:kimi-for-coding-[Kimi]-7", "provider": "factory" },
"custom:nemotron-3-nano-[Ollama]-37": { "flag": "--model", "value": "custom:nemotron-3-nano-[Ollama]-37", "provider": "factory" }
}
}步骤4:指定Olama模型的任务:
> Ask droid to review cli-team-bridge using the nemotron-3-nano model已测试:nemotron-3-nano(24GB,Q4_K_M)通过以下方式在约10秒内完成了文件列表任务 droid-acp 在macOS上,Ollama在本地运行 localhost:11434.
定制型号(Droid/Factory)
Droid支持在Factory中配置的自定义型号。使用 custom: 前缀:
"custom:kimi-for-coding-[Kimi]-7": {
"flag": "--model",
"value": "custom:kimi-for-coding-[Kimi]-7",
"provider": "factory"
}码头工人
使用Docker Compose构建和运行:
docker compose up -d默认情况下,容器以观察者模式运行。卷装载:
| 主机 | 容器 | 模式 | 用途 |
|---|---|---|---|
. | /app | rw | 桥源(实时重新加载) |
~/.claude | /root/.claude | rw | 与Claude Code共享的任务文件 |
~/workspace | /workspace | ro | 供代理分析的项目工作区 |
要在Docker中使用需要OAuth的代理,请挂载其凭据目录:
volumes:
- ~/.codex:/root/.codex # Codex OAuth tokens
- ~/.factory:/root/.factory # Droid/Factory OAuth tokens
- ~/.claude:/root/.claude # Claude Code OAuth tokens环境变量
默认情况下,所有代理都使用OAuth(请参阅 认证).只有当您更喜欢基于密钥的身份验证而不是OAuth时,才需要API密钥:
OPENAI_API_KEY=... # Optional: alternative to `codex login`
ANTHROPIC_API_KEY=... # Optional: alternative to `claude login`
GOOGLE_API_KEY=... # Optional: alternative to `gemini login`
OLLAMA_HOST=... # Optional: Ollama server URL (default: http://localhost:11434)安全
这座桥包括几项安全措施:
- Env allowlist:只有基本的系统变量(PATH、HOME、SHELL、TERM、LANG、NODE_ENV)和特定于代理的密钥被传递给子进程——机密不会泄露
- 权限控制:破坏性操作(rm-rf、强制推送、DROP TABLE等)会自动被拒绝;非破坏性操作使用
allow_once而不是allow_always - 路径遍历保护:验证项目路径是否位于工作区根目录内
- Stderr隔离:所有日志记录都会进入stderr,以保护stdout上的MCP JSON-RPC传输
- 流程生命周期监控:生成失败和意外退出会立即传播,而不是挂起30分钟
- 操作超时:
initialize和newSession有30秒的超时;prompt有30分钟的超时时间 - 内存管理:当任务映射超过100个条目时,已完成的任务将在1小时后被修剪
建筑
Claude Code (MCP client)
|
| MCP (JSON-RPC over stdio)
v
cli-team-bridge (MCP-to-ACP bridge)
|
| ACP (NDJSON over stdio)
|
|--- spawn ---> codex-acp ---------> codex CLI ----> OpenAI (OAuth)
|--- spawn ---> claude-code-acp --> claude CLI ----> Anthropic (OAuth)
|--- spawn ---> gemini --experimental-acp ---------> Google AI (OAuth)
|--- spawn ---> qwen --acp -----------------------> Alibaba (OAuth)
|--- spawn ---> droid-acp ---------> droid CLI ----> Factory.ai (OAuth)
|--- spawn ---> droid-acp ---------> droid CLI ----> Ollama (local)每 assign_task 调用会生成一个单独的ACP适配器进程。多个任务在孤立的子进程中并发运行。
源文件
| 文件 | 目的 |
|---|---|
src/index.ts | 入口点、CLI arg解析、模式选择 |
src/mcp-server.ts | MCP服务器——向Claude代码公开工具 |
src/acp-client.ts | ACP会话生命周期——生成、初始化、提示、清理 |
src/agent-adapters.ts | 从代理定义构建生成配置 |
src/config.ts | 配置加载器和验证 |
src/task-watcher.ts | 基于文件的任务轮询(观察者模式) |
src/result-writer.ts | 将任务结果写回JSON文件 |
src/manifest.ts | 为团队发现生成网桥清单 |
src/logger.ts | 碰撞安全结构化记录器(stderr+文件) |
测试结果
在macOS上同时测试的所有5个代理配置(2026-02-08):
| 代理 | 型号 | 时间 | 任务 |
|---|---|---|---|
| 通义千问 | 编码器型号 | 10s | 源文件列表 |
| 机器人 | kimi用于编码(kimi) | 20s | 错误处理审查 |
| 克劳德密码 | 作品 | 30s | 架构分析 |
| 双子座 | gemini-3-pro | 35s | 安全审查(3项发现) |
| 机器人 | nemotron-3-nano(Ollama) | 70年代 | 文件列表(局部推断) |
致谢
- Claude代码代理团队 --跨供应商代理协调的启示
- 代理客户端协议(ACP) --agent编辑器通信的开放标准
- Zed IDE --ACP适配器图案(
codex-acp,claude-code-acp) - 工厂/Droid --多模型定制布线与Ollama集成
许可证
麻省理工学院
