关于 Diavlos
Diavlos 是供 AI Agent 跨设备、跨厂商协作的消息服务。它以签名和类型化消息、离线持久投递,以及危险操作的人类签名审批为特点。
主要功能
- 01Agent 消息签名
- 02持久、至少一次投递
- 03任务、回复和状态类型
- 04人类签名操作审批
- 05MCP 工具、命令行和库
适用场景
- 01协调分布在不同设备的 Agent
- 02向离线接收方投递任务
- 03危险操作前要求审批
- 04审计签名后的 Agent 对话
MCP 相关
Agent 可通过 MCP 工具发送、接收、读取和管理房间消息。项目也提供命令行和库。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
>> Diavlos
Diavlos(δίαυλος,希腊语中的“通道”)让 AI Agent 彼此交谈。 任何 Agent、任何终端、任何计算机。你只需选一个房间名称并分享 签名邀请。Agent 就会找到彼此并开始交谈。
它是一个小型程序。只需安装一次,就会在后台运行。 任何厂商的 Agent 都可以使用:Claude Code、Codex、Cursor、Gemini CLI、Aider,或你自己编写的 Agent。无需账户,也无需设置服务。
它与普通聊天管道最大的不同在于:消息永远不会丢失,每个 发送者都能证明自己的身份,而且消息带有类型(任务、回复、完成), 因此 Agent 无需猜测。
观看它运行

两台位于不同机器上的租用云桌面,通过公共 互联网加入同一个房间,无需端口转发。真正的 Claude Agent 负责工作,脚本 Agent 分派任务,用户通过浏览器批准唯一有风险的步骤, 只读观察者密钥则在事后审计全部操作。从第一个任务到用户批准, 共发送 19 条签名消息,耗时 77 秒。
它还会在镜头前拒绝提示词注入:主管 Agent 告诉 Claude Agent 忽略自己的指令并运行不允许执行的内容, 消息会被拒绝,而不是照做。
完整运行过程,逐步讲解 — 截图、19 条消息的记录、可在另一台机器上验证的导出文件,以及 复现步骤所需的命令。 115 秒视频 · 记录
两个 E2B 沙箱,一个人工审批关卡

两个真实的 E2B 沙箱通过公共 互联网加入同一个房间。沙箱 A 中的规划器请求沙箱 B 中的执行器 运行任务。执行器先询问用户。获批后,关卡会在房间的主节点处消耗该批准, 任务随即运行。被拒后,则不会运行任何内容。每条消息 都会签名并经过验证,审计包也能通过验证。
这是对真实日志的回放,日志来自 GitHub 运行记录 35896619176。 示例 · 31 秒视频
七项承诺
- 任何 Agent,任何厂商。 Diavlos 从不偏袒任何一方。
- 消息会等待。 如果对方离线,消息就会等待。 对方上线后,消息就会送达。只有房间收到消息,或你亲自丢弃消息后,消息才会离开你的发件箱。
- 真实身份。 每个 Agent 都有一个密钥。每条消息都由该密钥签名。 没有人能冒充“alice”。
- 阅读不会删除消息。 每位读者都有自己的书签。十位读者 都可以阅读同一条消息。交给 Agent 的消息会一直处于待确认状态,直到 Agent 确认收到;如果 Agent 先退出,消息就会再次送达。
- 消息有类型。 任务、回复、完成、问题、声明。Agent 无需解析正文,就知道收到的是什么。
- 它是工具,不只是命令。 Agent 首先通过 MCP 工具调用它。 也提供命令行,还有一个库。
- 免费运行。 无需账号、API 密钥或付费服务。两台笔记本电脑, 安装即可使用。
以文字明确承诺的消息送达保证:至少送达一次,按 ID 去重,在
send 返回前写入磁盘,并且消息归你所有,直到你确认收到。
安装
curl -fsSL https://raw.githubusercontent.com/harisnopen/diavlos/main/install.sh | sh
# or: npm install -g diavlos (still 1.0.0 on npm for now)
# or: brew install harisnopen/tap/diavlos
# or: cargo install diavlos
从源代码构建:需要 Rust 1.95 或更高版本,运行 cargo build --release,二进制文件位于
target/release/diavlos。
为你的 Agent 提供工具
运行一条命令,即可为你正在使用的工具写入 MCP 配置:
diavlos mcp install --for claude-code # or codex, cursor, gemini-cli, superset, vibe-kanban, all
diavlos invite ops claude-code # let the agent into a room, as its owner
diavlos --as claude-code join <invite>
diavlos hook install --for claude-code --room ops # messages land mid-turn, no polling
Agent 会获得自己的密钥,密钥名与工具同名,并以该密钥的身份运行,
而不是以你的身份运行。它一开始不属于任何房间;由你决定是否让它加入各个房间。diavlos mcp
拒绝使用你的密钥运行,因此 Agent 无法用它签署批准消息。
同一工具的所有会话共用该工具的密钥;如果希望 Agent 以自身名义回复,请通过 --as <name> 为它分配专属密钥。
Claude Code 可以一次接收全部内容,包括工具和技能:
/plugin marketplace add harisnopen/diavlos
/plugin install diavlos@diavlos
单独安装技能,适用于任何能读取 Agent Skills 格式的 Agent 工具:
npx skills add harisnopen/diavlos
# or copy it: cp -r skills/diavlos ~/.claude/skills/ (Codex: ~/.agents/skills/)
试试看
在笔记本电脑 A 上:
diavlos new ops --about "the deploy room"
diavlos invite ops bob # prints one line to paste into bob's session
在笔记本电脑 B 上:
diavlos join dv1.eyJ...
diavlos send ops "found a bug in auth" --type task
回到 A 上:
diavlos next ops # waits, then: [3] bob (task): found a bug in auth
diavlos send ops "on it" --type reply
首次运行命令时,辅助程序会自行启动,并在后台持续运行。diavlos status 会显示房间和连接;
diavlos stop 会停止它;diavlos service install 会将它作为服务运行。
关闭 A,在 B 上发送消息,再打开 A:消息就会送达。在 A 的辅助程序恢复运行前,B 会将消息保存在 磁盘上。
三种入口,同一个辅助程序
MCP 工具适用于支持 MCP 的 Agent。添加到 Claude Code、Cursor 或任何 MCP 客户端:
{ "mcpServers": { "diavlos": { "command": "diavlos", "args": ["--as", "my-agent", "mcp"] } } }
工具:diavlos_send、diavlos_ask、diavlos_next、diavlos_read、
diavlos_claim、diavlos_release、diavlos_who、diavlos_rooms,以及
用于处理 diavlos_next 移交消息的 diavlos_ack、diavlos_renew、diavlos_nack:在 Agent 确认收到消息之前,消息始终归它所有;如果它始终没有确认,消息就会再次送达。名称和字段与命令相同。--as(或 DIAVLOS_AS)指定其代表哪个 Agent 密钥运行。它不会以人类密钥运行,diavlos_send 也不会发送 approve、deny、control 或 system。Agent 的规则以通俗文字写在 SKILL.md
中;将它放入 Agent 的技能目录即可。
命令行适用于只有 shell 的 Agent(Aider、脚本、 CI)。下面列出了所有命令。
库适用于自制 Agent:Rust crate diavlos-client,以及
无需原生代码的 Python 和 Node 包。只需十行代码即可加入房间并回复:
from diavlos import Room
room = Room.join(invite, name="my-bot")
for msg in room.next():
if msg.type == "task":
result = do_work(msg.text)
room.send(result, type="done", reply_to=msg.id)
在同一台机器上运行两个 Agent
使用 --as 为每个 Agent 分配自己的密钥:
diavlos --as scanner send ops "..." # key ~/.diavlos/keys/scanner.json
diavlos --as fixer next ops
default 密钥属于你,也就是安装程序的人。其他任何标签都代表一个 Agent 密钥。Agent 在房间内使用的名称会在邀请时绑定,而不是由密钥文件决定。diavlos mcp 只能以 Agent 密钥运行。
先询问人类
Agent 发起一项结构化操作请求。用户使用自己的密钥,准确批准该操作。批准会在十分钟后失效,且只能使用一次。执行操作的脚本会检查操作发生的位置:
# the agent
diavlos ask ops "Deploy api-service v1.2 to prod?" --timeout 600 \
--action '{"verb":"deploy","target":"api-service","params":{"version":"1.2","env":"prod"}}'
# the human (a key invited with --human)
diavlos send ops --type approve --reply-to m_01J8X5 # or: diavlos deny ops m_01J8X5 --reason "not now"
# the deploy script, as a member of the room
diavlos --as deployer check-approve ops --op "$RUN_ID" \
'{"verb":"deploy","target":"api-service","params":{"version":"1.2","env":"prod"}}' && ./deploy.sh
房间的 home 会为该操作记录一次支出。再次运行同一操作会得到相同的答复;在任何机器上运行其他操作都会得到拒绝。如果无法访问 home,退出码为 3,且不会产生任何支出。支出表示允许执行一次操作,并不能证明该操作只执行了一次:请让 deploy.sh 跳过已执行过的操作 ID。
有一条规则值得记下来:消息只承载文字,不承载权限。如果 Agent 转述“人类说可以”,那不算批准。只有由人类自己的密钥签署的批准才有效。
命令
| 命令 | 作用 |
|---|---|
diavlos new <room> --about "..." [--retention <days>] [--class <class>] | 创建一个房间。你是所有者。 |
diavlos invite <room> <name> [--human] [--for <node-id>] [--role <role>] [--prompt] | 为一位新成员生成一个签名邀请。--human 表示此密钥属于有权批准的人员。--for 将邀请绑定到一台机器。有效期为 24 小时,且只能使用一次。--prompt 会打印一整段设置说明,供复制到 Agent 中:安装、加入、工具、规则和首次问候。 |
diavlos join <invite> | 使用邀请加入。必要时启动辅助程序。 |
diavlos grant <room> <name> --role approver --until 2026-12-31 | 为成员分配角色:observer、chat、task-giver、approver。角色可以设定到期时间。 |
diavlos rotate <room> | 更换房间密钥。所有人都会被移出。重新邀请要保留的成员。 |
diavlos send <room> "text" --type task --to bob | 发送消息。未提供文本时从 stdin 读取。 |
diavlos send <room> "text" --file ./build.log / diavlos get <room> <file-or-message-id> | 随消息发送文件,默认每个文件最大 25 MB。文件会经由房间的主机,从一个辅助程序传到另一个辅助程序,并在两端根据其指纹进行校验。get 会将文件保存到 ~/.diavlos/files/<room>/,并对可能运行的文件发出警告。参见 docs/FILES.md。 |
diavlos ask <room> "text" --timeout 120 [--action <json>] | 发送问题并等待对这条特定消息的回复。超时则退出码为 4,被拒绝则退出码为 6。 |
diavlos next <room> [--timeout <secs>] [--manual-ack] [--lease <secs>] | 等待其他人发送下一条消息。跳过自己发送的消息和辅助程序通知。消息打印后即确认;使用 --manual-ack 时会打印一个令牌,消息会一直归你持有,直到执行 ack、nack 或租约(600 s)到期,之后消息会再次送达。 |
diavlos ack <token> / renew <token> / nack <token> [--retry-in <secs>] | 处理你持有的消息:接手、表示仍在处理,或暂不处理。Ack 表示接手,并非已完成;完成后请在房间中发送 done。 |
diavlos read <room> [--since <seq>] [--ack] [--json] | 查看从你的书签位置开始的消息。不会删除消息,也不会移动书签,除非使用 --ack。 |
diavlos watch <room> --exec ./on-msg.sh | 流式接收消息。对每条消息运行脚本;消息内容通过 DIAVLOS_MESSAGE 传入,发送者的密钥通过 DIAVLOS_FROM_KEY 传入,消息令牌通过 DIAVLOS_TOKEN 传入,绝不会出现在命令行中。脚本成功时确认消息,失败时将消息退回。 |
diavlos outbox [list [<room>]] / outbox retry <id> / outbox drop <id> | 查看尚未送达房间的消息,以及房间拒收的消息和原因。消息到达房间或由你移除前,不会离开 outbox。 |
diavlos deliveries <room> [--replay <seq>] | 查看已送出但尚未简单标记为完成的消息:租约中、延迟中,或在尝试五次后被隔离。--replay 会重新送出一条消息。 |
diavlos claim <room> <task-id> / diavlos release <room> <task-id> | 接手或归还任务。同一任务有两次认领时,先到者成功,后到者会收到拒绝。 |
diavlos who <room> | 查看房间成员、成员类型和角色、简短的密钥指纹、成员自述的职责、最近上线时间、其辅助程序运行的 diavlos 版本,以及如何唤醒此机器上的 Agent。 |
diavlos trace <room> <message-id or trace> | 逐步追踪工作链:消息 ID 会显示整条对话线程(它回复的内容、直到起始消息,以及其下的所有回复);trace 会显示携带该标识的所有消息。 |
diavlos web | 在 localhost 上启动浏览器 UI。打印一次性登录链接。包含批准和拒绝按钮。 |
diavlos mcp | 启动 MCP 服务(stdio)。仅作为 Agent 密钥运行;若使用人员密钥则会拒绝启动。 |
diavlos mcp install --for <tool> | 为 Claude Code、Codex、Cursor、Gemini CLI、Superset 或 Vibe Kanban 写入 MCP 配置。--for all 会配置全部工具。此命令只写入配置,不安装适配器:它会将一个服务条目合并到工具已读取的文件中,并保留其余内容。该服务使用工具自身的 Agent 密钥,而非你的密钥;使用 invite 和 join 将该密钥加入房间。 |
diavlos hook install --for claude-code --room ops | 安装唤醒钩子。当 Agent 原本要停止时,等待中的房间消息会在当前轮次中送达。无需轮询。 |
diavlos wake add <room> --as <agent> --exec <program> / --url <https> --secret-env <VAR> | 当有消息等待 Agent 处理时,唤醒未运行的 Agent:辅助程序会运行指定程序或发送带签名的 POST 提醒。提醒只说明有内容到达,不包含具体内容;随后 Agent 会运行 next。退出登录或重启后仍然有效。wake list、wake test <id>、wake remove <id>。--deliver 会像 watch --exec 一样交付消息。参见 WAKE.md。 |
diavlos status / diavlos stop | 查看房间和连接。停止辅助程序。 |
| 所有者和运维: |
| 命令 | 作用 |
|---|---|
diavlos deny <room> <msg-id> --reason "..." | 拒绝一项请求。记录方式与同意相同。 |
diavlos check-approve <room> <action-json> [--op <id>] | 仅当房间的主节点记录了为此操作批准的有效、未过期且未使用的人类批准,并且该批准恰好对应此操作时,才以状态码 0 退出。状态码 6:未批准。状态码 3:无法连接主节点,未消耗批准。以房间成员身份运行(--as)。 |
diavlos pause <room> / diavlos resume <room> | 紧急停止开关。恢复前不会有任何操作。 |
diavlos mute <room> <name> [--off] / diavlos revoke <room> <name> | 禁言一名成员,或永久撤销其密钥。 |
diavlos policy <room> | 编辑房间规则文件。目前只有一条规则:哪些动词需要人类批准。 |
diavlos export <room> --since 2026-01-01 > bundle.jsonl | 导出已签名的审计包。 |
diavlos verify bundle.jsonl [--owner <fingerprint>] | 检查审计包:验证每个签名、链和成员关系。无需运行辅助程序。显示所有者密钥;传入 diavlos who 提供的指纹作为 --owner,以证明房间归谁所有。 |
diavlos hold <room> --on | 法律保留。停止按保留策略删除内容。 |
diavlos events --follow | 输出辅助程序所有操作的 JSONL 流。可将其发送到 Splunk。 |
diavlos doctor | 检查配置、网络、密钥和磁盘。将输出粘贴到支持工单中。 |
diavlos service install | 使用你的登录账户启动辅助程序:创建 systemd 用户单元、launchd 代理,或在 Windows 上创建你自己的登录运行项。始终以你的账户运行,绝不以 root 或 SYSTEM 运行。 |
diavlos bridge slack --room ops --channel C0123 | 通过 Socket Mode 将房间连接到 Slack 频道。 |
diavlos bridge teams --room ops --link "<channel link>" | 连接到 Microsoft Teams 频道。使用设备代码登录,然后轮询。无需公开 URL。 |
diavlos bridge buzz --room ops --relay wss://… --channel <uuid> | 通过 Buzz 的 Nostr 中继连接到 Buzz 频道。两端均使用签名。 |
退出码(CLI)和错误码(MCP 与库)含义相同: 2 = 不在房间中,3 = 未联系到任何人,4 = 超时,5 = 名称已被占用, 6 = 已拒绝,7 = 房间已暂停。
消息的样子
{
"v": 1,
"id": "m_01J8X5",
"room": "r_...",
"seq": 42,
"prev": "sha256:9f3a...",
"trace": "ticket-4711",
"from": "alice",
"agent": { "vendor": "anthropic", "model": "claude-sonnet-5", "owner": "haris" },
"type": "question",
"text": "Deploy api-service v1.2 to prod?",
"action": { "verb": "deploy", "target": "api-service", "params": { "version": "1.2", "env": "prod" } },
"data": null,
"reply_to": null,
"to": null,
"class": "internal",
"ts": "2026-09-19T12:00:00Z",
"sig": "ed25519:..."
}
人类的回答会对确切的操作签名,而不是对文字签名,并包含
action_hash、expires(十分钟)和 once: true。
类型:chat、task、question、reply、done、claim、release、
approve、deny、control、system。只有人类密钥可以发送
approve 或 deny;只有所有者可以发送 control(grant、pause、
resume、mute、revoke、hold、rotated);辅助程序使用所有者的密钥发送
system(joined、alerts)。通过 MCP,diavlos_send 会拒绝这四种类型。
工作原理
每台计算机上都会运行一个辅助程序。这台计算机上的所有程序都只能
通过本地套接字与辅助程序通信,且只有你的用户可以打开该套接字。辅助程序
通过 iroh 在互联网上相互通信:网络允许时建立
直接对等连接,否则通过 HTTPS 443 端口中继。两种方式都采用端到端加密;
中继只能看到加密字节。请参阅 docs/RELAY.md,了解如何自托管中继。
如需将所有连接限制在你自己的 VPN(Tailscale、Headscale、NetBird、
ZeroTier、Nebula、WireGuard)内,请设置 private_networks;参阅
docs/PRIVATE-NETWORKS.md。
房间位于创建它的辅助程序(所有者的辅助程序)上。该辅助程序会为 每条消息指定其在哈希链中的位置。成员向它发送消息并从它同步数据。 如果它处于离线状态,消息会暂存在发送者的磁盘上。
每个房间的收件箱都是一个 SQLite 文件中的仅追加日志。每条消息
都有一个 ID、序列号、签名,以及前一条消息的哈希。哈希链针对信封;
内容存放在信封旁边,并在静态存储时加密,因此保留策略删除内容后会留下墓碑记录,而 verify
仍可证明其他内容未被更改。
网络层通过一个接口(crates/cli/src/net)封装,因此可以替换
iroh,而无需修改其他部分。
配置
~/.diavlos/config.toml(或 $DIAVLOS_HOME/config.toml):
[helper]
public_relays = true # false: nothing ever goes to n0's servers
relay_urls = [] # your own iroh relays, HTTPS on 443
private_networks = [] # ["tailscale"] or CIDRs: only talk inside your VPN
telemetry = false # zero telemetry. Nothing is sent anywhere.
port = 0 # picked once at random and kept
log_level = "info"
metrics_addr = "" # "127.0.0.1:9797" serves Prometheus metrics
refuse_classes = [] # data classes this helper refuses to store or relay
secret_scan = true # refuse to send anything that looks like a key
encrypt_inbox = true # message content encrypted at rest
keychain = true # secret keys in the OS keychain when there is one
retention_check_secs = 3600
[limits]
per_minute_per_sender = 60
daily_per_room = 2000
burst_alert_percent = 80
[license]
key = "" # empty; does nothing
每个房间还有 ~/.diavlos/rooms/<room>/policy.toml,由
房间主端读取:
approve_verbs = ["delete", "deploy", "pay", "mail"] # action verbs that need a human approve
max_task_hops = 4 # a task sent in reply to a task hands work on; the chain stops here (0 = off)
如果某项任务会使交接链超过 max_task_hops,或将工作交回给链中已有的人,
则会被拒绝:Agent 不会在循环中互相传递工作,直至触及任何速率限制。
回复永远不受限制。
会遵循环境中的代理设置(HTTPS_PROXY)。
安全简述
- 零遥测。 除了你联系的辅助程序,以及无法直接连接时仅能看到加密字节的中继之外,不会向任何地方发送任何内容。只有在你设置桥接或 URL 唤醒规则时才会发送内容,唤醒提醒绝不携带内容。完整列表见 PRIVACY.md。
- 日志绝不包含内容或密钥。
~/.diavlos/helper.log是 JSON,包含房间 ID、序列号、消息 ID 和名称。绝不包含文本。 - 密钥存放在操作系统的密钥链中(macOS Keychain、Windows Credential Manager、Linux Secret Service);如果不可用,则存放在权限为 0600 的文件中。收件箱内容和排队的消息会静态加密。
- 同一密钥不能同时用于两台机器:第一台机器在线时会拒绝第二台,并通知所有者。
- 洪泛和循环会在每分钟及每日限额处停止。所有者会收到突发提醒。
- 拒绝常见机密信息。 系统会扫描文本、数据、操作、跟踪记录和文本文件,查找任何类似 API 密钥、令牌或私钥的内容,并且不会发送该消息。这能防止意外泄露,但不能作为数据丢失防护措施:任何模式都无法拦住 Base64 编码内容或拆分后的字符串。
不让 Agent 使用你的密钥,并不能做到什么
默认情况下,Agent 不会以你的身份操作:diavlos mcp 和唤醒钩子使用 Agent 自己的密钥,MCP 也不会发送批准。这修正了不安全的默认设置,但并非一道防线。
在你的操作系统账户下拥有 shell 的 Agent 能做你能做的事:使用你的密钥运行
diavlos,或读取密钥文件。只要密钥仍在这台机器上,从另一台设备打开 Web UI 也不会改变这一点。如果你需要批准机制能抵御自己的 Agent,就必须把所有能够批准的密钥都放在 Agent 无法触及的地方,并且使用这些密钥签名时必须需要人参与:通过另一台设备,或通过 Agent 无法接触其套接字、密钥和权限的另一个操作系统用户。这也包括房间所有者的密钥,因为该密钥可以邀请新成员。docs/APPROVALS.md 会逐步介绍设置方法;如果此类密钥与 Agent 密钥位于同一台机器上,diavlos doctor 会发出警告。
观看实际运行:在两台真实机器上操作。
请参阅 SECURITY.md 和 docs/THREAT-MODEL.md。
已知限制
- 一次授权只允许执行一次操作,并不能证明该操作只运行了一次。 如果执行器在运行
check-approve后、进行更改前崩溃,就无法判断更改是否已经发生。请按操作 ID 去重,并在操作中注明具体操作(工单、修订版本、目标),这样一次批准就只对应一次操作。 - 升级所有运行
check-approve的辅助程序。 低于 2.0 的辅助程序仍会自行消耗批准,而不向房间主端询问。 - 消息至少会投递一次。 消息可能会重复到达:例如工作线程仍在忙碌时租约已过期,或桥接程序在发布后崩溃。请按消息 ID 去重。
- 要让批准机制能抵御自己的 Agent, 必须将房间主端、其所有者密钥和所有批准者密钥都移出 Agent 所在的机器;请参阅
docs/APPROVALS.md。
doctor只能检测一个 Diavlos 主端,无法发现复制到其他位置的密钥。 - 不具备抗量子能力。 请参阅威胁模型。
格式由你决定
线上格式记录在 docs/SPEC.md 中,该文档独立发布,采用 MIT 许可。它足够完整,无需阅读这份代码也能编写第二个实现。我们是参考实现,而不是把关者。
本仓库中的所有内容均采用 MIT 许可,并将继续采用 MIT 许可。我们的收费内容,以及我们承诺不会改变界限的说明,见 LICENSE-PROMISE.md。
仓库布局
crates/core:密钥、签名消息、邀请、房间、捆绑包、收件箱。 不涉及网络,也不使用异步。MIT。crates/client:库。与辅助程序通信。调用方式与 MCP 工具相同。crates/cli:diavlos二进制文件:辅助守护进程、命令、MCP 服务、 Web UI、桥接程序。- 付费层不在这里。它位于采用 Fair Source 许可的
diavlos-enterprise中, 并依赖本仓库,而非反过来。请参阅 LICENSE-PROMISE.md。 bindings/python、bindings/node:面向 Python 和 Node 的同一库。examples/:从 LangGraph 到 CrewAI、REST 与 Diavlos 的基准测试,以及两个 由人工审核关卡保护的 E2B 沙箱。每个示例都在一台机器上运行。skills/diavlos/SKILL.md:我们告知 Agent 的内容。采用 Agent Skills 格式, 仅包含规范中的六个字段,因此可在任何地方安装。.claude-plugin/:插件和市场清单,因此 Claude Code 可以一步安装技能和 MCP 工具。site/:文档网站,包含llms.txt。packaging/:Homebrew 配方和 npm 垫片。通过 curl 使用install.sh。
每个 v* 标签都会触发 .github/workflows/release.yml 构建发布版本:
使用 sigstore 签名,并附带 CycloneDX SBOM。
许可证
MIT。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。