内容
# 三个朋友
一个本地的、基于Java的 **MCP服务器**,允许三个命令行编码代理——**Codex** (`codex`)、**Claude Code** (`claude`) 和 **Antigravity** (`agy`)——相互委托工作。
您可以交互式地驱动一个代理(*协调器*);通过这个服务器,它可以**无头地启动其他代理**(使用每个订阅 - **无需API令牌**),捕获它们的输出,并进行协调。它自动执行跨代理审查和计划→实现的手动复制粘贴循环,帮助您在三个独立的5小时使用窗口中分配工作。
> 名称是 *Los Tres Amigos*(“三个朋友”)的双关语——这里是三个友好的 **竞争者**。
## 功能
- **委托**任务给特定代理(或按任务类型**自动路由**)并获取结果。
- **扇出**异步作业(例如,向其他两个代理并行发送代码审查)并轮询结果。
- **预算感知**:在滚动的5小时窗口中跟踪每个代理的使用情况,避免使用达到限制的代理。
- **基于能力的路由**:实现/推理优先使用Codex/Claude;审查分发给所有人。
- **提示库**:保存和重用标准委托提示,带有`{variable}`占位符。
- **共享便签板**:代理留下可供所有人查看的审查评论。
所有三个代理都连接到 **一个共享服务器**,因此作业、使用情况、提示和便签板都是共享的。
## 要求
- **Java 25+**(构建目标 `--release 25`)。
- 您要使用的代理命令行工具位于您的 `PATH` 中:`codex`、`claude`、`agy`。
- 不需要Maven来运行 - 使用捆绑的 `./mvnw` 进行构建。
## 构建和运行
```bash
./mvnw clean package # 生成 target/picamigos-mcp.jar
java -jar target/picamigos-mcp.jar --repo /path/to/your/project --port 8765
# 或者使用启动器: ./run.sh --repo . | run.cmd --repo .
```
服务器仅绑定到 **回环地址** (`127.0.0.1`),并在 `/mcp` 上通过Streamable HTTP提供MCP服务。
### 选项
| 参数 | 默认值 | 含义 |
|---|---|---|
| `--host <addr>` | `127.0.0.1` | 绑定地址(仅限回环地址) |
| `--port <n>` | `8765` | 绑定端口 |
| `--repo <dir>` | 当前目录 | 委托代理运行的工作目录 |
| `--config <file>` | 捆绑 | 代理配置覆盖(见下文) |
| `--prompts-file <file>` | `<repo>/.picamigos/prompts.json` | 提示库存储 |
| `--window-hours <n>` | `5` | 使用窗口长度 |
| `--dangerously-skip-permissions` | 关闭 | 默认委托到 `edit`(自动批准)模式 |
## 连接您的代理
运行服务器,然后在每个命令行工具中将其注册为MCP服务器(请验证您所在版本的确切语法):
- **Claude Code:** `claude mcp add --transport http picamigos http://127.0.0.1:8765/mcp`
- **Codex** — 在 `~/.codex/config.toml` 中:
```toml
[mcp_servers.picamigos]
url = "http://127.0.0.1:8765/mcp"
```
- **Antigravity** — 在 `~/.gemini/config/mcp_config.json` 中:
```json
{ "mcpServers": { "picamigos": { "serverUrl": "http://127.0.0.1:8765/mcp" } } }
```
(注意:agy使用 `serverUrl`,而不是 `url`。)
有关详细信息,请参见 [docs/client-setup.md](docs/client-setup.md) 和 [docs/routing.md](docs/routing.md)。
## MCP 工具
| 工具 | 用途 |
|---|---|
| `list_agents` | 配置的代理、可用性、模型、能力评分 |
| `agent_status` | 代理在滚动窗口中的预算/可用性 |
| `recommend_agent` | 任务类型的最佳代理(`review` → 所有可用) |
| `delegate` | 运行代理并阻塞以获取结果 |
| `start_job` / `get_job` / `list_jobs` / `cancel_job` | 异步作业 + 扇出 |
| `save_prompt` / `get_prompt` / `list_prompts` / `delete_prompt` | 提示库 |
| `post_note` / `get_notes` | 共享评论板 |
`delegate` / `start_job` 使用 `agent` 或 `task_type`(自动路由),以及 `prompt` 或 `prompt_name`(+ `variables`),可选 `mode`(`ask` = 只读,`edit` = 可能修改仓库)。
## 配置
代理命令、模式、能力评分和限制检测模式位于 [`agents.default.json`](src/main/resources/agents.default.json) 中。通过 `--config <file>`(深度合并默认值)覆盖任何子集 - 例如,重新调整能力评分或CLI标志,而无需重建。
## 已知限制
- **Antigravity(agy)在Windows上以非TTY模式返回空输出** - 其TUI渲染器写入控制台,绕过捕获的管道(即使 `agy models` 通过管道输出为空)。Codex和Claude工作正常。因此,它以 **`"enabled": false`**(排除自动路由;显式 `delegate` 仍然运行)状态发布。捕获agy需要伪控制台(ConPTY)桥 - 超出v1的范围。参见 [docs/cli-notes.md](docs/cli-notes.md)。
- 状态(作业、使用情况账本、便签板)是 **内存**,重启后丢失。只有提示库持续存在。
- 无身份验证,设计上仅限回环地址(无令牌,无远程暴露)。
## 开发
在小而可验证的步骤中构建。 `./mvnw verify` 运行所有单元 + 集成测试;集成测试启动真正的HTTP服务器,并使用MCP SDK客户端驱动它对抗假代理(无真实CLI /网络)。
🤖 由 [Claude Code](https://claude.com/claude-code) 生成