
为 DeepSeek Harness 接入 Buzz 协作平台:构建自托管 Nostr 消息网关的完整实践
深入解析如何通过 Nostr 协议将 DeepSeek Harness 接入 Block Buzz 协作平台:手把手配置 NIP-42 鉴权认证、基于 40003 事件的原位流式编辑输出、频道独立会话管理与本地工作区指令联动,为开发团队构建起安全可控、开箱即用的人机协同智能体开发环境与全新工作流程。
目录

DeepSeek Harness(DSH)的官方插件 dsh-message-gateway,能够将 DeepSeek Harness 助手无缝扩展至 Discord、Telegram、微信等多种主流即时通讯平台。该插件仓库已被 Fork 并进行了二次开发,旨在将 自建 Block 旗下 Buzz 协作平台:轻松构建人类与 AI 智能体高效协同工作的全新共享工作空间 接入支持列表。Fork 后的开源代码仓库位于 GitHub:https://github.com/Tech-Voyage-Dev/dsh-message-gateway 。

前置准备指南
自建 Block 旗下 Buzz 协作平台:轻松构建人类与 AI 智能体高效协同工作的全新共享工作空间
本教程将手把手带您在 Ubuntu VPS 上部署自托管的 Block 旗下 Nostr 中继服务 Buzz,并配置 Cloudflare DNS 安全网络。我们将帮助您搭建起一个安全性的共享工作空间,让您的团队成员与多个 AI 智能体(如 Claude、Kimi)能够基于加密身份进行高效沟通、共享项目上下文并实现无缝协作。
12 分钟阅读DSH 助手作为一个全功能成员加入 Buzz Nostr 中继,既能接收私信(DM),也能接收被 @mention 提及的频道消息,并通过与 Web UI 完全相同的独立会话智能体管线输出响应。
dsh-message-gateway 插件架构剖析
dsh-message-gateway 插件的系统架构清晰划分为宿主端与客户端两大部分:
- 宿主端(Node 环境):
gateway-store(凭证与配置持久化存储,位于~/.dsh/gateway.json)、platforms.ts(支持平台定义与连通性自检)、routes.ts(对外暴露的/gateway/*路由端点)以及bridge-manager.ts(常驻网关桥接器:负责按会话维护独立 Agent 实例并统一管理流式响应推送)。 - 客户端(浏览器前端):侧边栏的“Message platforms”可视化配置页面,负责录入密钥参数、发起连通性测试以及直观监控网关实时在线状态。
为网关接入一个全新通讯平台通常需要经历以下三步:
- 实现 Bridge 桥接类:提供
start/stop/status生命周期方法以及onText(text, frame)消息回调,结构规范与现有的wecom-bridge.ts完全一致。 - 接入 bridge-manager 调度器:复用既有的多会话调度管线(
ensureAgentForKey+pendingMap),并将底层文本输出流挂载至该平台的专用回复接收器。 - 对接持久化存储与配置路由:在
/gateway/save与/gateway/delete逻辑中实现:保存配置即自动启动桥接服务,删除配置则优雅停止桥接服务,配合autoStartXxx状态标记确保dsh web守护进程开机自动重连。
Buzz 网关桥接实现:Nostr 协议标准与事件生命周期
本次接入直接使用 DeepSeek Harness 自行编写完成了完整的 Buzz 适配桥接器。底层严格遵循了如下 Nostr 协议规范标准:
| 维度 / 阶段 | 协议实现规范与技术细节 |
|---|---|
| 底层传输(Transport) | 单条经过 NIP-42 鉴权认证的 WebSocket 链路;默认中继连接地址为 ws://localhost:3000;输入的 http(s):// 会自动规整为 ws(s):// |
| 鉴权认证(Auth) | AUTH 事件 kind 22242,携带标签 [["relay", url], ["challenge", challenge]],内容为空字符串,由 Agent 的私钥完成签名 |
| 订阅机制(Subs) | 严格基于频道隔离:REQ {"kinds":[9], "#h":[<uuid>]} — 每个频道独立建立一条订阅。全局性的 kinds:[9] 虽能收到 EOSE 但绝不广播推送;多值 #h 标签过滤在协议中无法正常分发 |
| 频道发现(Discovery) | 历史元数据回溯查询 REQ {kinds:[39000]} 提取频道详情(其中 type == "dm" 用于标记单聊私信频道) |
| 成员变动订阅 | 实时长连接订阅 REQ {kinds:[44100,44101], "#p":[Agent 公钥], since: now-60s} — 44100 为入群,44101 为被移出,均附带 p+h;成员关系变更时无需重连即可动态热更新订阅状态 |
| 即时聊天事件 | kind 9 事件,携带 ["h", channel] 频道标签,可选附带 ["e", replyTo] 回复目标与 ["p", mention] 被提及者标签 |
| 原位更新编辑 | kind 40003 事件,附带 h 与 e 目标标签;内容完全替换;中继单包上限 64 KB → 严控载荷 ≤ 60,000 B;超长回复分块处理 — 首块用于原位编辑替换,超出部分作为回复串线程的 kind 9 消息追加 |
| CLOSED 异常帧处理 | 鉴权未完成前收到 auth-required 属于正常引导阶段(完成 AUTH 后重新拉起订阅);鉴权完成后遇断连 → 阶梯式限次重试(最多 3 次,间隔 0/1/2 秒退避);整链重连时全量重构上下文 |
| 中继拉取上限 | 每次订阅最多拉取 2000 条历史事件,即使配置了 since 过滤参数,中继仍按自最新向过去的时间倒序返回 |
| 消息命中判定 | 仅当满足以下任一条件时才激活处理入站 kind 9:(a) p 标签明确包含自身公钥,(b) 处于 DM 私信频道,(c) 回复关联的 e 根事件为自身发出的消息。自动过滤自身公钥发送的内容(彻底杜绝自环) |
| 出站 @ 提及 | 出站内容按纯文本原样发布 — 中继端不对正文中的 @ 符号进行预校验;p 标签填入当前对话原作者以及至多 7 位其他被提及者的公钥(单条上限 8 位) |
| 私聊消息(DM) | 依赖中继作用域内的明文受限频道(元数据标注 type: "dm") — 当前桥接实现中未引入 NIP-04/44 复杂非对称端到端加密 |
| 媒体附件(入站) | NIP-92 imeta 规范(url, sha256, m)→ 常规 HTTP(S) 流式下载,本地校验 SHA-256 完整性,单文件限制 20 MB,每条消息最多 4 张;出站图片发布暂无官方中继协议路径,现阶段不支持出站图片 |
Buzz 适配网关的启动引导时序图如下:

基于 Nostr 40003 事件原位编辑实现的实时流式输出
Nostr 协议缺乏原生打字中(Typing)状态通知,且底层事件设计为严格只增不改。为了让对话过程具备行云流水的实时交互感,Buzz 适配网关通过原位编辑巧妙模拟了流式打字输出:

- 网关首先秒级发出一条
kind 9占位消息,随后在 Agent 推理过程中按设定的节流阈值连续发射kind 40003原位编辑事件逐步追加渲染内容,并在推理终点落定最终文本。这一设计思路与 Telegram、Discord 桥接器的实现方式一脉相承。
通过聊天指令打通 DeepSeek Harness 本地工作区
DSH Web 界面所支持的“工作区(Workspaces)”核心能力依赖于底层 @deepseek-ai/dsh-workspace 模块中的 workspaceRegistry 服务:
const existing = await ctx.workspaceRegistry.resolveByPath(request.path);
Buzz 桥接器通过引入全新的聊天斜杠指令 /workspace <目录路径>,允许在群聊中直接向 DSH 注册并绑定本地现存的文件夹。在此之后,该会话下的所有交互都将牢牢锚定在此目录中,并能实时无缝同步在 DSH Web UI 端查看。

开发与使用过程中需重点明确的三大设计机制:
- 变更目录等同于开启全新会话:会话的工作目录(
cwd)在初始化生成 Session Header 时即完成写入,后续在生命周期内不可直接原地篡改。 - 目标本地目录必须预先存在:底层
create注册函数会对路径进行强校验,若路径在宿主机不存在将直接抛出异常拒绝绑定。 - 高度安全敏感指令:通过网关衍生的会话均赋予 auto-approve(自动批准命令执行)特权,拥有对目标文件夹直接进行读写和工具操作的完全访问权。
安装与配置全流程指南
- 在终端运行以下指令完成插件拉取与启动:
dsh plugin --profile web add https://github.com/Tech-Voyage-Dev/dsh-message-gateway.git
# Start DSH web
dsh web
- 待 DSH Web 界面启动并用浏览器打开后,点击界面侧边栏中的“Message platforms”图标:
![]()
- 在左侧平台列表中选择“Buzz”:

- 点击“Generate keypair”按钮即时生成全新的 Nostr 身份密钥对。请务必将生成的
npub公钥妥善复制暂存,后续步骤将作为关键身份凭证。 - 准确填入您的 Relay URL(中继地址)以及需要监听订阅的 Channels(允许访问的频道 UUID 白名单列表)。
- 点击底部的“Save”按钮完成保存。
表单提交后,系统将持久化保存配置并立即启动 Buzz 网关服务。私钥 nsec 作为最高机密凭证被自动保护,仅独立存放在宿主机本地的 ~/.dsh/gateway.json 文件中。
将 DSH 智能体注册至 Buzz Nostr 中继服务
将 DSH 助手作为新成员注册加入中继。此处公钥填入上文所生成的 npub 字符串:
docker compose exec relay buzz-admin add-member --pubkey npub123123123
将 DSH 助手加入特定的沟通频道。仅加入中继并不会让助手自动出现在频道成员列表中。需要通过 buzz-cli 进一步执行入群操作。注意此处 --pubkey 参数必须使用 HEX 16 进制公钥格式,而非 npub 格式(在上一步执行 buzz-admin add-member 时,终端输出中会打印对应的 HEX 公钥):
buzz channels add-member --channel <CHANNEL_UUID> --pubkey <AGENT_HEX> --role member

CLI 指南
如何安装并使用 buzz-cli
手把手教您安装和配置 buzz-cli,以便在 Nostr 中继上管理频道、成员密钥以及 AI 智能体的角色权限。
5 分钟阅读随后可通过 buzz-cli 灵活更新 DSH 助手在 Nostr 中继中的公开资料,设置更具辨识度的昵称:

在客户端向 DSH 助手发送一次 Wave(Buzz 平台独特的 DM 私信打招呼动作)。助手随后返回回复,代表网关通讯已完全就绪:

向 DSH 助手发送 Wave 私信打招呼 — 桥接网关正常秒级响应。
通过 /workspace 指令开启本地工作区联动
由于 allowWorkspace 配置项出于环境安全考虑默认处于禁用(false)状态,未经配置直接向助手发送 /workspace 命令会被系统拦截拒绝:

打开配置文件 ~/.dsh/profiles/web/cordis.patch.yml 添加开关配置,随后重启 dsh web 服务即可:
- id: ui-message-gateway
config:
allowWorkspace: true
配置生效并重启后即可顺利绑定:

实用贴士:此命令默认假设工作区目录名(例如截图中的 TechVoyage)直接位于当前用户的个人主目录之下;若目录处于其他深层路径,请务必传入完整绝对路径。通过 Buzz 频道中注册绑定好的新会话,也都会完全同步在 DeepSeek Harness Web 界面上显示。

Buzz 频道支持的完整可用指令
其他平台支持的几乎全部原生功能在 Buzz 中均可顺畅运行:
| 指令语法 | 功能说明 |
|---|---|
/workspace <folder> | 将本地已存在的文件夹注册绑定为当前对话专属的工作区环境(受配置项开关保护) |
/help | 打印并列出所有支持的命令清单 |
/time | 获取并输出当前服务器系统时间 |
/new | 丢弃旧上下文,原地重置开启全新会话 |
/clear | 清空当前上下文所有历史对话流 |
/status | 查看当前 Buzz 消息桥接器的实时在线状态 |
/stats | 查看当前系统活跃会话总量及所有接入平台(包含 Buzz)的桥接连接详细状态 |
/commands | 输出全量指令的底层规范与参数描述文档 |
@path/to/file | 与 Web 端的 @ 文件提及功能完全一致:Agent 自动相对于工作区读取文件内容;单独发送 @、@前缀 或使用 /files <前缀> 可返回文件/文件夹列表 |
/model | [provider model effort] — 校验有效后实时切换该会话的底层推理大模型与思考深度;单独输入 /model 显示支持的候选列表,/model reset 恢复系统默认设置 |
/effort | <id> 仅针对支持思考深度的模型调整 reasoning effort;/effort reset 恢复默认推理深度配置 |
核心安全架构总结
- 私钥资产隔离保护:Agent 专属的私钥 nsec 仅保存在宿主机的
~/.dsh/gateway.json中(0600 文件只读权限,原子写入机制) — 永远不会通过 API 端点对外暴露,也不会打印至日常调试日志中。 - 全链路加密签名验签:每一个入站的 Nostr 事件在投递给 Agent 执行之前,都会严密执行密码学数字签名检验(
verifyEvent)、消息防重放判重、自发自收环路过滤以及 @提及权限校验。 - 本地工作区指令受限保护:由于网关会话默认开启特权自动批准机制,
/workspace目录注册能力默认处于禁用状态,必须由开发者在配置文件中明确开启(allowWorkspace: true),严防非预期提权暴露敏感目录。
结语:拥抱 Buzz 去中心化人机协作时代
在将 Buzz 接入 dsh-message-gateway 的探索过程中,最大的技术挑战在于严密契合 Nostr 协议的去中心化事件生命周期与事件约束规范。所幸插件本身优秀的架构底座已经将多 Agent 会话管理与命令分发高度抽象,一旦建立起可靠的事件监听与原位流式编辑链路,整个桥接网关便能呈现出超预期的流畅度与生产级稳定性。
参考文献与资料:
- dsh-message-gateway architecture guide — 官方网关架构指南、扩展实践与安全规范
- nostr-tools — 底层调用的核心 Nostr JavaScript 客户端库
- deer-flow IM channel connections — 即时通讯平台多通道连接架构设计参考
相关文章

协作
自建 Block 旗下 Buzz 协作平台:轻松构建人类与 AI 智能体高效协同工作的全新共享工作空间
本教程将手把手带您在 Ubuntu VPS 上部署自托管的 Block 旗下 Nostr 中继服务 Buzz,并配置 Cloudflare DNS 安全网络。我们将帮助您搭建起一个安全性的共享工作空间,让您的团队成员与多个 AI 智能体(如 Claude、Kimi)能够基于加密身份进行高效沟通、共享项目上下文并实现无缝协作。
11 分钟阅读
AI 与智能体
教程:使用 Cloudflare WARP 安全地将 Hermes Agent 暴露至私有网络
本文深入探讨如何使用 Cloudflare WARP 与 Zero Trust 技术,在完全不需要开启任何防火墙入站端口的情况下,安全地将您的 Hermes Agent 暴露到私有网络中,从而实现全球范围内的安全访问。这为您构建专属私有远程 AI 基础设施打下坚实基础。
5 分钟阅读
旅行
使用Docker与TREK自托管您的个性化智能旅行日程:一站式深度规划并轻松管理预订、财务和行李清单
本文详细介绍如何使用Docker部署开源旅行规划系统TREK。我们将带您配置Caddy反向代理和Cloudflare R2对象存储,实现数据的安全备份与图片的高效加载。此外,还将演示如何利用MCP(模型上下文协议)连接Claude等AI智能体,通过自然语言对话一键生成您的专属旅行日程,开启完美旅程。
22 分钟阅读