内容
<!--
中继:厂商中立的AI编码代理编排器
README。真相的源头在于docs/。保持同步。
-->
<div align="center">
```
██████╗ ███████╗██╗ █████╗ ██╗ ██╗
██╔══██╗██╔════╝██║ ██╔══██╗╚██╗ ██╔╝
██████╔╝█████╗ ██║ ███████║ ╚████╔╝
██╔══██╗██╔══╝ ██║ ██╔══██║ ╚██╔╝
██║ ██║███████╗███████╗██║ ██║ ██║
╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝ ╚═╝
```
**你的AI编码代理即将达到极限。中继让它们继续工作。**
_适用于AI编码代理的交接协议:一种签名、便携式合同,携带意图、计划和正在进行的代码从一个代理到另一个。_
中继检测 **已经在你的机器上运行的会话**,读取每个会话正在执行的操作,并将工作交给新的代理、账户或提供商,在任何一个代理达到配额之前。一个订阅到期,任务在另一个订阅上继续。
_厂商中立。适用于Claude、Codex、Antigravity、OpenCode、Ollama、Copilot、Continue、Cline、Cursor。_
[](https://golang.org)
[](https://www.rust-lang.org)
[](LICENSE)
[](https://dbisina.github.io/relay)
[文档](https://dbisina.github.io/relay) · [架构](docs/architecture.md) · [提供商](docs/providers.md) · [贡献](CONTRIBUTING.md)
</div>
---
## 60秒快速入门
**前提条件:** git,加上至少一个AI代理CLI已安装并认证(例如 `npm i -g @anthropic-ai/claude-code` 然后 `claude login`)。
**macOS / Linux**
```bash
curl -fsSL https://raw.githubusercontent.com/dbisina/relay/main/scripts/install.sh | bash
```
**Windows** (PowerShell)
```powershell
irm https://raw.githubusercontent.com/dbisina/relay/main/scripts/install.ps1 | iex
```
### 运行任务
```bash
cd my-project
relay init
relay run "添加退款流程到订单服务"
```
打开桌面应用程序会为你启动守护进程,并在关闭窗口后保持运行,因此CLI可以继续在同一个编排器上工作。
> **推荐路径:** 上述安装程序从最新的GitHub Release中提取预构建的二进制文件,这很快,但取决于该版本为你的操作系统构建的交叉编译是否干净。从源代码克隆和构建是更可靠的路线,始终与当前代码匹配,这是维护者每天实际运行的:
> ```bash
> git clone https://github.com/dbisina/relay && cd relay
> ./scripts/setup.sh # macOS/Linux,自愈:安装缺失的Go/Rust/git
> ./scripts/setup.ps1 # Windows
> ```
> 查看 [贡献](CONTRIBUTING.md) 以获取完整的开发循环设置。
---
## 问题:上下文碎片化
随着编码代理变得更加专业,瓶颈不再是任何单个模型,而是 **它们之间的交接**。代理达到使用限制,或者你想要在下一步使用不同的模型,而意图、计划、半成品编辑和“不要重做”知识蒸发了。你手动粘贴上下文并希望。
中继将交接视为一等公民的签名协议。当代理达到墙壁时,中继在安全点暂停它,将其正在执行的操作序列化为签名 **继续合同**,并从该合同恢复一个新的代理、帐户或提供商,没有丢失状态。
```mermaid
sequenceDiagram
participant A as 代理 A (Claude)
participant R as 中继
participant C as 继续合同(签名)
participant B as 代理 B (Codex)
A->>R: 流事件(意图,计划,文件,令牌)
Note over A: 达到使用限制 / 过载
R->>A: 请求安全暂停(在一个git提交)
R->>C: 序列化 + HMAC签名<br/>(提示,计划,任务剩余,未完成代码)
R->>B: 调度合同为系统上下文
B-->>R: 心跳(恢复)
Note over B: 继续相同的任务,没有丢失上下文
```
## 为什么是中继?
大多数开发人员同时使用多个AI编码订阅,因为这比烧掉API积分更便宜。痛苦的是,当一个代理达到其限制时,工作就会停滞,上下文就会丢失。中继解决了这个问题。它是为 **订阅套利** 而构建的,在您拥有的每个帐户和提供商之间保持工作流程。
```bash
relay detect # 查找已经在此机器上运行的所有AI代理
relay detect --adopt <id> --target codex --start # 提升其工作,在另一个代理上继续
```
| 功能 | 描述 |
| :--- | :--- |
| **检测运行代理** | 扫描进程 + 硬盘转录。显示每个会话的提示、计划、任务剩余、文件、技能、MCP和令牌使用情况。Claude Code、Codex、Copilot(CLI + VS Code)、Cursor、Cline、Continue、Antigravity。 |
| **采用和移植** | 一个命令将检测到的会话提升到签名继续合同,并在另一个代理上恢复。从桌面应用程序或 `relay detect --adopt`。 |
| **帐户自动故障转移** | Claude帐户A耗尽?中继在帐户B上恢复,相同的模型, **0 API积分**,然后在所有登录帐户用完之前切换到另一个提供商。 |
| **配额钱包** | 每个提供商 + 帐户的剩余配额、重置时间和燃烧率ETA在一个面板中。路由下一个任务到有空间的帐户。 |
| **预测交接** | 根据实时燃烧率预测耗尽时间,并在 **之前** 安全点交接,任务中途不会丢失。 |
| **时间机器** | 每次交接快照git + 签名合同。差异每个代理执行的操作;非破坏性地回滚到任何步骤。 |
| **管道设计器** | 在UI中编写多代理DAG:每个部分一个代理,显式排序,卡顿路由。 |
| **继续合同** | HMAC签名Markdown + JSON携带目标,计划,决策,约束,文件清单,未完成代码。跨提供商边界生存。 |
| **知识 + 代码图** | 决策/约束/文件 + 一次符号扫描(Go,Rust,TS,Py,Java)的SQLite存储库,可在 `/api/retrieval` 处使用FTS5搜索。 |
| **秘密编辑器** | AWS / OpenAI / Anthropic / GitHub / JWT模式在边界之前被清除。 |
| **MCP服务器** | `relay mcp` 将整个API公开为工具,因此任何MCP客户端(Claude Desktop,Cursor,Cline)都可以驱动中继。 |
## 提供商矩阵
| 提供商 | 安装 | 认证 | 本地/云 |
|---|:---:|:---:|:---:|
| **Claude** | `npm` | `claude login` | 云 |
| **Codex** | `npm` | API密钥 | 云 |
| **Antigravity** | 手动 | 手动 | 云 |
| **OpenCode** | `brew`/`npm` | API密钥 | 云 |
| **Ollama** | `brew`/`winget` | - | 本地 |
| **GitHub Copilot** | `gh ext` | `gh auth login`| 云 |
| **Continue** / **Cline**| VS Code | 扩展 | 两个 |
*通过PATH、扩展、npm、brew或winget自动检测首次探测。*
## 架构
```mermaid
graph TD
User([你]) -->|relay run| CLI(CLI)
User -->|打开应用程序| UI(relay-ui)
CLI <--> 守护进程(Relay守护进程<br/>HTTP :4748)
UI <--> 守护进程
守护进程 --> 编排器(编排器<br/>FSM,交接,编辑器)
编排器 <--> 图表[(知识图<br/>SQLite)]
编排器 --> 审计[(审计日志)]
编排器 --> 适配器(适配器注册表)
适配器 -->|流| Claude[Claude]
适配器 -->|聊天| Codex[Codex]
适配器 -->|API| Ollama[Ollama]
适配器 -->|扩展| Copilot[Copilot]
```
查看 [架构文档](docs/architecture.md) 以获取完整的架构图,包括交接状态机。
## 与另一个LLM客户端(MCP)一起使用
中继还作为 **模型上下文协议** 服务器运行。任何MCP感知的客户端(Claude Desktop,Cursor,Cline,Continue)都可以调用中继进行交接,查询会话状态,检索代码上下文,发送回复。
```jsonc
// Claude Desktop 配置
{
"mcpServers": {
"relay": {
"command": "relay",
"args": ["mcp"]
}
}
}
```
## 交接合同(协议)
中继标准化的单元是 **继续合同**:一个HMAC签名的文档(适用于人类的Markdown + 机器的JSON边车),任何代理都可以从中恢复。v2模式携带:
- `initialPrompt`:原始提示,逐字逐句
- `plan` / `tasksRemaining`:源代理跟踪的计划和剩余任务
- `skillsLoaded` / `skillsInUse`:会话拥有的能力
- `inFlightCode`:正在编辑的文件,带有截断的代码片段
- `decisions` / `constraints` / `doNotRedo`:必须在边界生存的硬赚取的上下文
它使用项目的 `.relay/.signing-key` 进行签名,因此接收代理可以验证合同是由您的中继生成的,并且在传输过程中未被篡改。有关完整的模式,请参见 [docs/architecture.md](docs/architecture.md)。
## 查看交接
交接今日可从CLI运行:
```bash
# 强制提前交接以观察一个任务的完整循环
relay run "重构订单服务" --force-handoff 0.5
# 或提升一个已经运行的代理,并在另一个提供商上继续它
relay detect --adopt <id> --target codex --start
```
在TUI(`relay tui`)或桌面应用程序中查看 `handoff` 事件流。
## 路线图
- 记录端到端交接演示(GIF + 视频)。
- 合同模式v3:更丰富的内存(基于嵌入式的检索已在 `internal/codegraph` 中搭建)。
- 更多代理适配器和社区贡献的新会话存储检测。
- 发布一个有版本号的延续合同规范,以便第三方代理可以直接发出和消费它。
- 知识图的持久层选项,超出本地SQLite。
- 桌面UI设计(参见 [问题 #1](https://github.com/dbisina/relay/issues/1))。
## 文档
- [开始使用](docs/getting-started.md)
- [架构](docs/architecture.md)
- [提供商](docs/providers.md)
- [配置文件和路由](docs/profiles.md)
- [视觉fallback](docs/vision.md)
- [安全性和隐私](docs/security.md)
- [API参考](docs/api-reference.md)
- [CLI参考](docs/cli-reference.md)
- [MCP服务器](docs/mcp.md)
为贡献代理存储库地图: [CODEMAP.md](CODEMAP.md)。代理规则: [CLAUDE.md](CLAUDE.md) / [AGENTS.md](AGENTS.md)。
## 贡献
欢迎贡献。请参阅 [贡献指南](CONTRIBUTING.md) 和 [行为准则](CODE_OF_CONDUCT.md)。设置脚本是自愈的:它在构建之前安装任何缺失的工具链(Go,Rust,git)。
```bash
git clone https://github.com/dbisina/relay
cd relay
# 一次性设置(自动安装缺失的工具)
./scripts/setup.sh # macOS/Linux
./scripts/setup.ps1 # Windows
# 开发循环
./scripts/dev.sh # 守护进程 + UI并行
```
## 许可证
Apache-2.0。请参阅 [LICENSE](LICENSE)。在Anthropic Claude Code、OpenAI Codex CLI、Ollama、egui和Bubble Tea的基础上构建。完整的积分在 [OPEN_SOURCE.md](OPEN_SOURCE.md) 中。
[](https://star-history.com/#dbisina/relay&Date)