内容
# 📤 AgentTransfer
[](https://github.com/shehryarsaroya/agenttransfer/actions/workflows/ci.yml)
[](LICENSE)
**开放源代码的AI代理Dropbox.** 您的代理只需一次API调用即可注册,获得一个文件夹和一个电子邮件地址,并可以将文件移动到任何代理或人类,文件大小最高可达**5 GB**,文件通过过期共享链接发送,链接通过普通电子邮件发送。
无需审批步骤,无需信用卡,无需SDK。注册即时生效,并附带**400 MB的存储空间**;人类所有者只需点击一次即可解锁20 GB的存储空间,并使文件夹永久保存。文件以内容寻址和重复数据删除的方式流式传输;链接在**24小时**内过期 — 或在您请求的情况下,在单次下载后过期 — 任何具有收件箱的实体都可以接收文件。每个操作都会留下一份**ed25519签名、哈希链接的收据**。
一个静态的Go二进制文件。一个数据文件夹。通过一个命令即可在任何机器上启动 — 或在5美元的VPS上自行托管,并使用三个DNS记录。
```
┌──────────────┐ upload ┌───────────────────────┐ email (manifest) ┌──────────────┐
│ OpenClaw │ ──────────► │ 您的AgentTransfer │ ───────────────────► │ Codex代理 │
│ (代理A) │ │ 实例 │ │ (代理B) │
└──────────────┘ │ │ ◄─────────────────── └──────────────┘
│ 文件夹:持久 │ HTTPS下载
您,抄送到 ──────► │ 链接:≤24小时,sha256 │ (哈希验证)
每次传输 │ 收据:签名 │
└───────────────────────┘
```
## 30秒内使用 — 代理从这里开始
托管实例在 **agenttransfer.dev** 上开放注册。如果您是阅读此内容的代理,以下四个调用是整个产品,您现在就可以运行它们。
```sh
# 1. 注册自己 — 无需审批,无需人工介入
# (选择一个名称;您的人的电子邮件成为您的所有者)
curl -X POST https://agenttransfer.dev/v1/agents \
-d '{"name":"my-agent","owner_email":"human@example.com"}'
# → { "email": "my-agent@agenttransfer.dev", "api_key": "at_live_...", ... }
# 密钥仅显示一次 — 存储它。您开始时有400 MB。
# 2. 上传到您的文件夹 — 流式传输,任意大小高达5 GB
curl -T ./weights.tar.gz "https://agenttransfer.dev/v1/files/weights.tar.gz" \
-H "Authorization: Bearer at_live_..."
# → { "sha256": "8f2a41...", "size": 209715200, ... }
# 3. 发送它 — 到另一个代理,或人类的收件箱
curl -X POST https://agenttransfer.dev/v1/send \
-H "Authorization: Bearer at_live_..." \
-d '{"to":["codex-bot@agenttransfer.dev"],"file":"weights.tar.gz","note":"training set v3"}'
# 相同实例的代理:即时收件箱交付,无需电子邮件参与
# 其他人:普通电子邮件,附带下载链接 + 机器清单
# 4. 接收:长轮询您的收件箱,下载,验证哈希
curl "https://agenttransfer.dev/v1/inbox/wait?timeout=60" -H "Authorization: Bearer at_live_..."
curl -L "<offer url>?dl=1" -o weights.tar.gz && shasum -a 256 weights.tar.gz
```
您可以从第一秒开始接收 — 任何发送到 `my-agent@agenttransfer.dev` 的邮件都会进入您的收件箱,包括附件。两件事情需要您的所有者点击验证链接,该链接是在注册时通过电子邮件发送的:向人类发送电子邮件,以及完整层级(20 GB,文件永久 — 在此之前,您有400 MB,文件在24小时后过期)。
**如果您是人类:** 最短的路径是将此页面交给您的代理 — 它可以自己完成上述所有操作。或者,将其连接到任何MCP-capable运行时(Codex,Cursor,OpenClaw,…):
```json
{
"mcpServers": {
"agenttransfer": {
"url": "https://agenttransfer.dev/mcp",
"headers": { "Authorization": "Bearer at_live_..." }
}
}
}
```
MCP工具:`whoami`,`list_files`,`upload_file`,`share_file`,`send`,`check_inbox`(长轮询),`read_message`,`download_file`,`create_upload_request`,`get_receipts`。喜欢终端吗?同一个二进制文件就是客户端:
```sh
agenttransfer signup https://agenttransfer.dev --name my-agent --owner you@example.com
agenttransfer put weights.tar.gz --share --ttl 3h # 上传(+ 可选链接)
agenttransfer send weights.tar.gz --to codex-bot@agenttransfer.dev --note "training set v3"
agenttransfer inbox --wait 60
agenttransfer get msg_abc123 # 下载并sha256验证,始终
agenttransfer log --verify # 您的签名收据轨迹
```
## 为什么
代理越来越多地需要将制品交给其他代理:模型权重,数据集,构建输出,屏幕录制。跨运行时(OpenClaw ↔ Codex ↔ Cursor),跨机器,跨组织。2 GB的数据集不适合通过上下文窗口,通常的变通方法意味着共享云驱动凭证或建立S3 +预签名URL +通知通道 — 每次都有人工介入。
AgentTransfer的赌注:**电子邮件是控制平面,HTTPS是数据平面。**
- **电子邮件** 给您身份,寻址,通知,人类可见性和跨实例联合 — 所有这些都是免费的。任何具有收件箱的代理都可以参与;无需注册,无需SDK。
- **HTTPS** 移动字节:流式传输,分段,快速 — 从不通过电子邮件或上下文窗口压缩。
- **内容寻址** ( everywhere sha256)意味着每个接收者都可以验证它收到了什么。
- **签名收据** 意味着您可以证明谁发送了什么给谁 — 无需信任操作员。
## 模型
文件夹是一个驱动器。链接是WeTransfer。线路是电子邮件。
| 东西 | 生命周期 | 为什么 |
|---|---|---|
| **文件夹文件** (验证所有者) | 持久(配额绑定) | 这是一个驱动器 — 您的代理的工件保留 |
| **文件夹文件** (所有者尚未验证) | 在 `UNVERIFIED_FILE_TTL` (24小时)后过期;验证会解除已上传的所有内容的过期 | 匿名注册获得一个临时目录,而不是免费的永久托管 |
| **共享链接** | ≤ 24小时,内容寻址,可撤销 | 公共表面是短暂的:消除链接泄漏风险,存储滥用,保留焦虑 |
| **未认领的到达** (传入电子邮件附件,上传请求) | 在 `DEFAULT_TTL` 后过期,除非代理 `keep` 它们 | 陌生人无法填充您的配额 |
| **收据** | 追加-仅永久 | 签名 + 哈希链接证据 |
**仅限一次读取** (`?once=1`):用于凭证和一次性交接的单次下载链接。共享页面和HEAD请求永远不会消耗读取(链接展开器是无害的);只有完成的字节流才会烧毁它。
**撤销是真实的**:`DELETE /v1/links/{token}` (或 `agenttransfer rm <token>` )现在杀死一个链接* — 飞行中的下载被中途切断。
**反向流程**:`agenttransfer request --note "drop the screen recording here"` 为人类创建一个一次性浏览器上传页面;文件进入代理的收件箱。
## 电子邮件:联合层
外发邮件携带人类可读的正文 **以及** 机器可读的清单部分(`application/vnd.agenttransfer+json`),其部分与 [A2A](https://github.com/a2aproject/A2A) `TextPart`/`FilePart` 字段对齐,因此A2A代理原生消费AgentTransfer报价:
```json
{
"v": 1,
"from": "openclaw-dev@agents.example.com",
"message_id": "msg_7hk2...",
"parts": [
{ "kind": "text", "text": "training set v3" },
{ "kind": "file",
"file": { "name": "weights.tar.gz", "mimeType": "application/gzip",
"uri": "https://agents.example.com/f/nk3Xw9pT2mQe" },
"metadata": { "agenttransfer.sha256": "8f2a41...", "agenttransfer.size": 209715200,
"agenttransfer.expiresAt": "2026-07-03T10:00:00Z", "agenttransfer.once": false } }
]
}
```
人类只看到一个带有链接的普通电子邮件。AgentTransfer实例将清单解析为结构化的收件箱报价,并附带DKIM结果(`trusted` 需要DKIM通过,其签名域与From域对齐)。线程(`In-Reply-To`/`References`)有效,因此多轮代理对话在代理收件箱和您的邮件客户端中正确地线程化 —
交付率分歧使自托管变得可行:**接收原始邮件,发送通过中继.** 二进制文件在其自己的入站SMTP监听器上运行端口25(入站很容易)。出站邮件通过任何中继密钥(`OUTBOUND=resend:re_...` 是一个带有免费层级的环境变量),因此您的廉价VPS的IP声誉永远不会重要。
## 收据:便携式证据
每个操作(`uploaded`,`sent`,`received`,`downloaded`,`revoked`,`burned`,`expired`,`deleted`)都追加一个收据,该收据由实例的ed25519密钥签名,并通过哈希链接到前一个收据:
- 签名证明 **谁做了什么**,
- 链证明 **没有被悄悄删除**,
- 公共密钥发布在 `/.well-known/agenttransfer`,因此任何人都可以离线验证:
```sh
agenttransfer log --verify # 您的切片:签名检查
AGENTTRANSFER_ADMIN_TOKEN=... agenttransfer verify https://agents.example.com # 完整链
```
## 运行您自己的实例
托管实例是一个默认依赖项 — 以上所有操作都适用于您自己的服务器,并且有三个级别的努力。
**先在本地试用** (无需域名,无需密钥,无需配置):
```sh
git clone https://github.com/shehryarsaroya/agenttransfer
cd agenttransfer && go build -o agenttransfer .
./agenttransfer demo # 两个代理在30秒内完成文件交接
./agenttransfer serve # 或运行真正的本地实例;API在:8080
```
演示创建两个代理,从`alice`到`bob`交接一个1 MiB文件(上传 → 发送 → 长轮询 → 下载),在两端验证sha256,并加密验证签名收据链。
**从任何机器公开上线,一条命令:
```sh
./agenttransfer serve --connect
# connect: 已注册 — 此实例是 https://quiet-moth-79.agenttransfer.dev
```
这是在您的笔记本电脑上运行的完整公共实例:可达的共享链接和具有真实地址的代理(`bot@quiet-moth-79.agenttransfer.dev`)可以立即接收邮件 — 甚至在笔记本电脑睡眠时(它排队并在重新连接时交付)。一个出站隧道到*connect主机*提供公共URL和邮件槽;您的文件,密钥,收件箱和收据永远不会离开您的机器。详细信息,配额和滥用防护措施: [docs/connect.md](docs/connect.md)。
**或拥有所有内容 — 10分钟VPS设置.** 您需要四样东西:一个具有开放的入站端口25/80/443的LinuxVPS,一个域名,一个出站中继密钥(Resend的免费层级有效),以及Go 1.25+ 或Docker来构建。除了这些 — 无需数据库服务器,无需S3,无需反向代理。
```sh
# 在任何具有开放端口25/80/443的VPS上(一个5美元的盒子足够了)
DOMAIN=agents.example.com OUTBOUND=resend:re_xxx ./agenttransfer serve
agenttransfer doctor # 检查DNS,端口25,TLS,中继身份验证 — 带有复制粘贴修复
```
三个DNS记录:`A agents.example.com → 您的-ip`,`MX agents.example.com → agents.example.com`,以及您的中继提供的SPF/DKIM记录。TLS是自动的(使用Let's Encrypt via certmagic)。添加 `CONNECT_DOMAIN=agents.example.com`,您的VPS也是一个连接主机 — 您的笔记本和homelab盒子在其下获得即时公共子域名。
完整的指南(systemd,Docker,备份,提供商笔记): **[docs/self-hosting.md](docs/self-hosting.md)**
### 配置
| 环境变量 | 默认值 | 它执行什么 |
|---|---|---|
| `DOMAIN` | — | 启用邮件 + 自动证书(例如 `agents.example.com`) |
| `DATA_DIR` | `./data` | SQLite + 块 + 实例密钥 |
| `HTTP_ADDR` | `443` with `DOMAIN` (除非 `BEHIND_PROXY`),否则 `:8080` | HTTP(S) 监听器 |
| `SMTP_ADDR` | `:25` with `DOMAIN`,否则关闭 | 入站SMTP监听器 |
| `OUTBOUND` | — | `resend:re_...` \| `smtp://user:pass@host:587` \| `smtps://…` |
| `ADMIN_TOKEN` | 首次启动时生成 | 闸门注册 + 管理端点 |
| `OPEN_SIGNUP` | `false` | 公共注册(按IP限速;取的名字有随机后缀;保留的名字被阻止) |
| `MAX_FILE_SIZE` | `5GB` | 每个文件上限 |
| `STORAGE_QUOTA` | `20GB` | 每个代理的文件夹上限(验证所有者) |
| `STORAGE_QUOTA_UNVERIFIED` | `400MB` | 文件夹上限,直到所有者验证 |
| `UNVERIFIED_FILE_TTL` | `24h` | 未验证所有者的代理文件过期;验证使文件夹持久(`off`禁用) |
| `DISK_RESERVE` | `10%` | 全局备份:上传被拒绝(507)而SQLite永远不会有风险; `GET /v1/admin/storage` 显示谁持有字节; `agenttransfer doctor` 报告守护者的状态 |
| `DEFAULT_TTL` / `MAX_TTL` | `3h` / `24h` | 共享链接(和未认领文件)生命周期 |
| `SEND_RATE` / `UPLOAD_RATE` | `100` / `200` | 每个代理的每日限制 |
| `MAX_AGENTS_PER_OWNER` | `10` | 开放注册代理所有者邮件(-1禁用) |
| `IP_RATE` | `600` | 公共页面按IP限速(IPv6按/64;完整地址为2^64个免费身份) |
| `UPLOAD_BODY_TIMEOUT` | `1h` | 慢速正文读取超时 — 边界身体技巧客户端永远不会超时下载(禁用禁用) |
| `HUMAN_RECIPIENTS_MAX` | `3` | 唯一远程收件人数量上限,每个代理,永久 — 圈子(所有者豁免; `-1` 禁用;通过 `POST /v1/agents/{id}/limits` 提高每个代理) |
| `PUBLIC_URL` | 派生 | 广告基站 URL(在代理后面设置) |
| `BEHIND_PROXY` | `false` | 信任 `X-Forwarded-For`,禁用自动证书 |
| `ACME_EMAIL` | — | Let's Encrypt 账户电子邮件 |
| `METRICS` | `localhost` | Prometheus `/metrics`:`off` \| `localhost` \| `admin` |
| `CONNECT` | — | 客户端:借用公共 URL + 电子邮件来自连接主机(`serve --connect` 糖) |
| `CONNECT_DOMAIN` | — | 主机:为 `*.<domain>` 子域提供连接服务 |
| `CONNECT_SEND_RATE` / `CONNECT_BYTES_PER_DAY` | `50` / `5GB` | 主机:每个实例的每日中继 + 传输上限 |
## 安全模型
- API 密钥和管理员令牌存储 **哈希**;使用 `agenttransfer rotate-key` 轮换。
- 共享令牌为 128 位随机数;服务器端强制 TTL;下载次数计数和收据。
- 注册默认情况下受到管理员限制。启用 `OPEN_SIGNUP=true` 后,代理必须有一个 **经过验证的人类所有者** 才能发送出站电子邮件(包括抄送所有者) — 公共实例不得成为垃圾邮件炮弹。验证落在 **确认页面** 上;电子邮件链接本身无副作用,因此邮件扫描器无法代表所有者批准。
- 即使验证,代理也只能对唯一远程收件人发送小 **圈子**(默认为 3;所有者豁免;本地代理不计入) — 妥协或提示注入的代理无法成为垃圾邮件炮弹。操作员可以为每个代理扩大圈子。
- 每个绑定的人类收件人都有一个电子邮件 **取消订阅链接**(HMAC 签名,因此无法伪造以抑制受害者);在发送时跳过已抑制的地址。
- 未验证的代理获得减少的存储配额(`STORAGE_QUOTA_UNVERIFIED`) **并且他们的文件在 `UNVERIFIED_FILE_TTL`(24 小时)后过期** — 匿名注册获得一个临时目录,而不是免费的永久托管;一个所有者电子邮件可以注册最多 `MAX_AGENTS_PER_OWNER` 个代理,因此身份不限量免费。
- **磁盘永远不会满**:全局备份(`DISK_RESERVE`,卷的 10%)在 SQLite 处于风险之前拒绝上传;`GET /v1/admin/storage` 显示谁持有字节;`agenttransfer doctor` 报告守护进程的状态。
- 公共身份免费页面(`/f/`,`/u/`,索引)按 IP 速率限制(IPv6 按 /64;完整地址将获得 2^64 个免费身份)并自动对重锤攻击者进行 15 分钟封禁;上传带有慢速正文读取超时(`UPLOAD_BODY_TIMEOUT`),而下载故意流式传输不限时。
- 代理可以被删除(`DELETE /v1/agents/self` 或管理员删除) — 他们拥有的所有内容都会被删除,链接也会断开,但他们的 **收据仍然存在**:链条是追加证明。
- 入站 SMTP 仅接受现有代理的邮件;超大邮件在套接字处被拒绝;验证 DKIM 并显示(`offer.trusted` 需要与 From 域对齐的通过)。
- 服务器 **从不获取外域 URL**(无 SSRF 表面);跨实例下载是收件人的明确哈希验证行为。
- 连接实例是匿名的但被围栏:出站电子邮件需要验证所有者,每个实例都有每日发送/出口限制和暂停开关,并且您的机器(而不是主机)解析(并检查 DKIM)排队的邮件。参见 [docs/connect.md](docs/connect.md)。
## 文档
- [docs/connect.md](docs/connect.md) — 从任何机器启动;运行您自己的连接主机;滥用防护措施
- [docs/self-hosting.md](docs/self-hosting.md) — VPS 设置,DNS,Docker,systemd,备份
- [docs/api.md](docs/api.md) — 完整的REST参考
- [docs/protocol.md](docs/protocol.md) — 清单格式,收据规格,`/.well-known/agenttransfer`
## 开发
```sh
make test # 单元测试 + 端到端测试
make demo # 构建并运行演示
make lint # gofmt + go vet
```
纯Go(1.25+),无cgo(`modernc.org/sqlite`),编译为单个静态二进制文件。参见 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 状态和路线图
早期但完整:文件,链接,烧毁后阅读,带有线程和幂等性的发送/收件箱,入站SMTP +对齐的DKIM,MCP,签名收据,连接(隧道+存储转发电子邮件+配额),演示,医生。**agenttransfer.dev 开启公开注册** — 页面顶部的说明今天就生效。连接托管(公共子域)接下来;直到它发布,`--connect` 需要一个您运行的主机。
不打算在这里:收件箱Webhook(长轮询覆盖代理;SSRF安全的Webhook是v1.1),自动获取外部报价(同样的原因),S3 Blob后端,可恢复的上传,IMAP(永远不会 — 人类已经有收件箱了)。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器