
Covalent Bond
io.github.gopalrajsuresh由 GitHub 账号 gopalrajsuresh 发布v0.1.2更新于 Oct 24, 2026
Peer-to-peer, end-to-end-encrypted collaboration channel for AI coding agents over MCP.
概览
一个本地 MCP 服务器,通过端到端加密的中继让两台机器上的 AI 编程代理配对,交换文件和短消息。
- 可以做什么
- 创建、加入、查看和结束两个代理之间的配对会话,会话码通过带外方式共享,并可查询握手状态与待处理事件。向对端发送文件,端到端加密,带类型白名单、大小上限和速率限制,可附一段上下文说明。在两个代理之间发送简短的加密文本消息。长轮询等待下一个对端事件,例如消息、文件或断开连接。接受或拒绝传入的文件传输,接受的文件写入本地接收目录并以不可信数据形式返回。
- 适用场景
- 适用于两位开发者或两台机器上的代理需要直接交接文件、约定和上下文,且不希望开放入站端口或依赖共享仓库,同时希望传输加密并由人工确认把关的场景。
- 运行要求
- 以 npm 包(npx covalent-bond)通过 stdio 在本地运行,需要 Node.js。需要可访问的中继端点:默认使用公共中继,或通过 COVALENT_RELAY_URL 指定自建的 Cloudflare Worker。可选设置 COVALENT_MAX_FILE_KB 和 COVALENT_NOTIFICATIONS。未声明需要账号或 API 密钥。
安装
在 SourceWeft 中
- 打开 控制台中的 Covalent Bond,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
[Covalent Bond: two agents sharing an encrypted channel]
Covalent Bond
A secure channel that lets two AI coding agents on different machines work as one.
Quick start · How it works · Tools · Security · Architecture · Contributing
[MCP compatible] [Node.js >= 18] [E2EE: AES-256-GCM + X25519] [Relay: Cloudflare Workers] [License: MIT]
A covalent bond is two atoms sharing a pair of electrons. Covalent Bond is two coding agents on different machines sharing something just as fundamental: a private, authenticated channel, and through it, a way of working.
Picture two developers pairing across a distance. One has their agent dialed in (organized skills, sharp conventions, the right context loaded) and it produces excellent work. The other is more ad-hoc, and their agent turns out something that's just okay. Covalent Bond is the channel that closes that gap: the well-tuned side can hand over the files, context, and conventions that make its agent good, so both agents converge on the same high-quality way of working. It bonds not just two agents, but two ways of working, pulling the weaker setup up to the level of the stronger, as equal peers.
It's peer-to-peer and end-to-end encrypted: the two agents pair up and exchange messages and files through a relay that can never read the traffic. It works with any MCP-compatible agent (Claude Code, Cursor, Codex, Windsurf, Cline, and others), exposing bond_* tools over the Model Context Protocol. And it keeps a human in the loop: every incoming file waits for explicit consent before it touches disk.
- 🤝 Bonds two ways of working: share files, context, and conventions so both agents level up together
- 🔒 Authenticated E2EE: a malicious relay can't read or MITM the channel
- 🌐 Cross-machine: pair agents anywhere, through a dumb relay (no inbound ports)
- 🙋 Human-in-the-loop: consent before any file is written; full audit log
- 🔌 Agent-agnostic: any MCP client, not tied to one vendor
It doesn't magically clone one setup onto another. It's the secure, consent-gated channel that makes deliberately sharing your working style possible between two machines that otherwise can't reach each other.
Quick start
Shortcut: let your agent set everything up. Paste docs/AGENT-SETUP.md to any coding agent and say "set up Covalent Bond". It walks the agent through install, relay config, MCP registration, and pairing, with clear stops for the parts only a human may do.
Or do it yourself on both machines (steps 1–2), then pair (step 3).
-
Register the MCP server with your agent — no install needed,
npxfetches the npm package. For Claude Code:(
--scope usermakes thebond_*tools available in every project. The env var points at the public relay; to self-host instead, see Pick a relay.)For other MCP clients (Cursor, Codex, Windsurf, …), this standard stdio-server config works in most of them; paste it into the client's MCP settings JSON (the top-level key is usually
mcpServersorservers):Windows and local-testing notes
On Windows, if your client struggles to spawn
npxdirectly, wrap it:"command": "cmd", "args": ["/c", "npx", "-y", "covalent-bond"]. For local testing without a deployed relay, run the mock relay from a source checkout (npm run relay:dev) and pointCOVALENT_RELAY_URLathttp://localhost:8787.Prefer running from source?
The
.envalready contains the public relay URL. Then register withcommand: node, args/absolute/path/to/covalent-bond/bin/cli.js(Claude Code:claude mcp add --scope user covalent -- node /absolute/path/to/covalent-bond/bin/cli.js), no env var needed. -
Restart your agent session, then verify: ask the agent to run
bond_status. It should reply "No active session", which means the tools are live. -
Pair and share
- Machine A: "Create a Covalent Bond session" → agent runs
bond_connect→ you get a code likeAbCd-1234-XyZw. - Tell the code to the other human out-of-band (chat or voice, never through the relay).
- Machine B: "Join Covalent Bond session AbCd-1234-XyZw" → agent runs
bond_join. - Either side:
bond_status→ Secure channel established → send files (bond_send) and messages (bond_message). Incoming files wait for the human tobond_accept. - Done?
bond_endon both sides.
- Machine A: "Create a Covalent Bond session" → agent runs
How it works
Both agents meet at a relay that is untrusted by design — it forwards ciphertext it can never decrypt. The session code travels human-to-human, never through the relay, and that out-of-band secret is what authenticates the channel:
If anything in the middle tampers with the key exchange, key confirmation fails and the session aborts before any data flows — a malicious relay can't read or impersonate either side.
Pick a relay
The relay is a dumb pipe and untrusted by design: it sees only a random routing ID and ciphertext, never the session code, keys, or plaintext, and a malicious relay still can't read or forge anything (that's covered by the test suite's MITM scenario). So either option below is equally secure; it's purely a convenience choice.
Option 1: use the public relay (fastest)
Sessions expire after 30 minutes of inactivity and nothing is retained. Best-effort availability, rate-limited.
Where to set COVALENT_RELAY_URL (either place works; a real environment variable wins over .env)
-
.envfile (simplest): copy.env.exampleto.envin the covalent-bond folder and edit the value. The MCP server reads it at startup, so it applies no matter which project you use the agent from. -
MCP client config: pass it when registering the server, e.g. for Claude Code:
For other MCP clients, add it to the server's
envblock in their JSON config.
After changing either, restart your agent session so the MCP server relaunches.
Option 2: deploy your own in ~2 minutes (free Cloudflare account)
Then set COVALENT_RELAY_URL to that URL on both machines. Full details (Durable Object migration, optional per-IP throttle, local wrangler dev) are in cloudflare-worker/README.md.
Or let your agent do it
Paste this to any coding agent running in this repo:
Deploy my own Covalent Bond relay: install wrangler if missing, run
wrangler loginand wait for me to finish authenticating in the browser, thenwrangler deployfromcloudflare-worker/, and tell me the URL to set asCOVALENT_RELAY_URLon both machines. Followcloudflare-worker/README.md.
The only manual step is the browser login; the agent handles the rest.
Pair two agents
- Machine A: "Create a Covalent Bond session." → the agent calls
bond_connectand returns a code likeAbCd-1234-XyZw. - Share that code with Machine B out-of-band (chat, voice, in person). It's the secret that secures the link. Never paste it into the relay.
- Machine B: "Join Covalent Bond session
AbCd-1234-XyZw." → the agent callsbond_join. - When
bond_statusshows Secure channel established, start sharing: "Sendsrc/auth.jsto my peer," or hand over the pieces that make your agent good: a skill file, a conventions doc, the context that shapes how it works. The peer sees a consent prompt and accepts before anything is written, and the received content arrives wrapped as untrusted data for the other agent to read and adopt.
Tools
bond_connect— Create a session and get a shareable session codebond_join— Join a session using a code shared out-of-bandbond_status— Connection status, pending transfers, and new eventsbond_send— Send a file to the connected peer, encrypted end to endbond_message— Send a short encrypted text message to the peerbond_wait— Long-poll for the next peer eventbond_accept— Accept a pending file transfer after human consentbond_decline— Decline a pending file transferbond_end— End the session and disconnect from the relay
Full reference:
? marks an optional parameter. confirmed channel means the tool refuses to run until key confirmation has succeeded on both sides; human consent means the agent may only call it after the human explicitly decides on the pending transfer.
Incoming events raise a desktop notification (disable with
COVALENT_NOTIFICATIONS=off). File size defaults to 256 KB, overridable via
COVALENT_MAX_FILE_KB (up to 384 KB, bounded by the relay's wire limit).
Security
Each session is secured by two secrets: ephemeral X25519 keys exchanged through the relay, and a short session code the two humans share out-of-band. The code is mixed into the encryption key but never sent to the relay, so a relay that tampers with the key exchange (a MITM) can't derive the key, key confirmation fails, and the session aborts before any data flows. The relay only ever sees a routing ID, public keys, and AES-256-GCM ciphertext. Every incoming file waits for explicit human consent, and every operation is logged.
Full details, threat model, and handshake diagram: docs/ARCHITECTURE.md.
Share the session code over a channel the relay operator doesn't control. That out-of-band step is what makes the channel authenticated, not just encrypted.
Testing
No network or wrangler needed. The suite covers the key schedule, the full handshake and file transfer, two MCP servers end-to-end, a simulated malicious relay (mitm), and the relay's hardening. See docs/ARCHITECTURE.md for the breakdown, and docs/TWO-MACHINE-TEST.md for a real two-machine run.
Deploying the relay
The relay is a Cloudflare Worker in cloudflare-worker/ with one Durable Object per session. It stores only routing IDs, public keys, and ciphertext, expiring 30 minutes after the last activity. It can't decrypt anything.
Status
Authenticated E2EE, MCP integration wired end-to-end, full test suite green. Pre-1.0: the protocol and API may still change.
Contributing & security reports
Contributions are welcome. Start with CONTRIBUTING.md, which includes the security invariants and the branch/PR workflow. To report a vulnerability, please use the private process in SECURITY.md, not a public issue.
License
MIT; see LICENSE.
Two machines. One way of working. Back to top ↑
来源:README.md,提交 84908f1
工具
0版本历史
1- v0.1.2最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分