跳转至

210. dsh-conversation-link:让 DSH 里的对话像同事一样互相说话

一句话定位dsh-conversation-link 是 DeepSeek Harness(DSH)的多对话协作插件——让同一进程里的各个对话可以互相发现、直接发消息、查看对方进度,并给自己声明常驻规则。让对话像同事一样互相说话

1 TL;DR

  • 补上 DSH 缺失的横向协作路径:平级对话之间可发现、可连接、可通信、可观察。
  • 无层级:连接只是"名字",不是"权限",没有任何对话能成为另一个的上级。
  • 规则自治:每条约常驻规则只约束声明它的那个对话,别的人不能替别人立规矩。
  • 所见即所连:agent 眼里可寻址的对话列表 = 人在侧栏看到的列表,给未打开的对话发消息时会自动按人点开的路径打开它。
  • 安装一行命令,已随 web profile 锁定依赖,43 个测试用例通过。

2 痛点:DSH 原本只有一条"父子"路径

DSH(DeepSeek Harness)把一次次的 AI 协作组织成"对话",但跨对话的能力原本只有一条路:

父会话 ──spawn/subagent──▶ 子代理(单向、树状、有层级)
  • 平级对话之间互相看不见,更没法直接说话;
  • 想盯另一个会话的进度,只能靠人肉去翻;
  • 想长期记住"谁负责什么",没有会话自己的"记忆挂件"。

一句话:DSH 里缺一张"平级同事"的通信网dsh-conversation-link 就是把这条横向路径补上。

3 它是什么

一个跑在 DSH 里的插件,提供一套"对话间协作"能力:

能力 说明
发现 列出当前工作区可寻址的对话(本工作区未归档 + 你连过的 + 连接你的)
连接 给对话起昵称、建立双向链接(可带备注),连接持久化
通信 互相发消息,消息带来源署名,无需二次连接即可直接回复
观察 不打扰地读对方进度:当前轮次/步骤、最近的人类与助手文本、最近用过的工具名
开新会话 自己开一个平级新对话,可顺手连上并派第一个任务
立规矩 给自己声明常驻规则,约束自己后续的工具调用行为

4 核心设计理念

4.1 无层级:连接是名字,不是权限

链接是「名字」,不是「权限」。没有任何机制让一个对话成为另一个的上级。

这一点是它和 AgentTeams / 子代理体系最本质的区别:连接只解决"怎么称呼对方、怎么找到对方",不改变任何对话的权责关系。断开连接不会让对方停止运行,也不会影响对方给自己立的规则。

4.2 规则自治:规矩只能管自己

conversation_rule 声明的是自己的常驻规则,分三个阶段生效:

  • before:在某个工具调用执行前拒绝它(比如"不安全改动一律拒绝");
  • after:对已完成的调用结果做验收,不合格就作为纠错反馈打回;
  • input:每一步开始时给自己读一遍约束("先看 schema 再动手")。

规则持久化、跨重启存活。别的对话无法替别人立规矩——这保证了每个人(每个会话)对自己的行为负责。

4.3 可见性:agent 看到的 = 人看到的

插件遵守一个朴素原则:agent 眼里的对话列表 = 人在侧栏看到的列表。归档的、空白占位的、子代理的、别的默认工作区的,一律不可寻址。给尚未打开的对话发消息时,插件会按用户在侧栏点开的同一条路径自动打开它——agent 不会看到一个"幽灵会话"。

4.4 先说话,后连接

不需要预先建立连接才能发消息:首次向对方发送时自动建立连接(autoLink),消息可见、可审计、随时可断开。连接下方自动附带你的自我介绍(briefOnLink),对方一眼知道你是谁。

7 个工具速览

工具 作用 典型用法
conversation_list 列出可寻址的对话;scope:"all" 跨工作区 开局盘点"有哪些同事"
conversation_link 起昵称连接对方(可带 note),自动发自我介绍;持久化 把前端会话记为 frontend
conversation_unlink 断开连接 协作结束,礼貌解绑
conversation_send 发消息;目标未打开时先自动打开;auto/queue/steer 三种投递模式 催进度、派任务、回报结果
conversation_status 不打扰地读对方进度 盯板:看 B 会话到哪一步了
conversation_spawn 开一个平级新对话,可连接并派第一个任务 为项目新开一个功能会话
conversation_rule 给自己设/删/列常驻规则(before/after/input) 声明"未经我确认不许删文件"

寻址方式三选一:昵称(如 frontend)、handle(形如 amber-otter 的稳定短名)、session id。

5 消息怎么送达

跨对话消息带来源署名,例如:

[message from frontend (clever-otter)]

对方直接用 conversation_send 就能回你,不需要第二次连接。投递模式:

  • auto(默认):对方正在跑 → 插入其下一个 step 边界(steer);对方空闲 → 给它开一轮新任务;
  • queue:总是等对方当前工作结束、另起一轮;
  • steer:总是加入最近的 step;
  • inject:只注入上下文、不唤醒对方。

6 安装与配置

# 通过 dshpm 安装到 web profile
dshpm install dsh-conversation-link --profile web

# 或从 GitHub 安装
dshpm install github:duanyunlun/dsh-conversation-link --profile web

装完需要重启 DSH(桌面端不做 patch 热重载)。

常用配置项:

配置 说明 默认
stateDir 状态目录 $DSH_HOME/conversation-link
briefOnLink 连接时向对方发自我介绍
autoLink 首次发送自动建立连接
messageForm 消息形态:relay / notice
notify / notifyCooldownMs 规则命中时通知自己

状态文件:$DSH_HOME/conversation-link/state.json(handles / links / rules,原子写入,version 1 自动迁移)。改名不丢数据:0.3.0 之前它叫 dsh-conversation-bindings,旧状态文件会被继续沿用。

7 与 AgentTeams / 子代理的区分

维度 AgentTeams (多智能体团队) 子代理 (subagent) dsh-conversation-link
关系 队长(Captain)指挥队员 父 → 子,单向 平级、无层级
任务形态 DAG、质控关口、轮次 一次性/可续接委托 自由发消息,无任务框架
谁约束谁 队长定任务契约 父给子完整提示 各自只约束自己(规则自治)
定位 规模化、带质量管控的流水线 外包一段自包含工作 对话间通信网、长期协作记忆

三者不互斥:AgentTeams 管"有质量的批量生产",子代理管"外包一段活",conversation-link 管"平级同事之间的日常沟通与盯梢"。你完全可以在一个 AgentTeams 团队之外,用 conversation-link 挂一群平级功能会话。

8 适用场景

  • 一个总调度 + 一群功能会话:调度会话记住谁负责什么、盯各自进度、做接口对接、喊停越界操作;
  • 长期项目协作:B/C/D/E 四个功能会话随时回报调度方,进度可查询、消息可审计;
  • 多面手工作台:把"前端 / 后端 / 测试 / 文档"各开一个会话,各自给自己立行为规则,跨会话传话;
  • 接力式工作流:A 会话把中间产物交给 B 会话继续,全程可追踪。

9 真实案例:秘书会话调度 12 个会话

这正是我们现在的工作方式——主人的 Vault 里有一个秘书会话(handle 如 ready-maple),通过本插件把 12 个平级会话纳进一张协作网做总调度:

  1. 开工:秘书用 conversation_list 盘点可寻址会话,用 conversation_link 逐一起昵称连接;
  2. 派活:给具体会话 conversation_send 下任务(本文就是秘书派给笔者写的);
  3. 盯进度:用 conversation_status 不打扰地轮询各会话的 turn/step 与最近动作,不用挨个打断;
  4. 收口:会话完成回报 → 秘书汇总 → 主人审阅;
  5. 立规矩:秘书给自己声明 conversation_rule(如"未确认不建文件"),保证调度行为可预期。

10 推荐语

如果你在用 DSH 做多会话协作,却仍靠"人肉切换窗口"传话——试试 dsh-conversation-link。它不引入层级、不绑架你的工作流,只做一件事:让对话像同事一样互相说话。安装即用、状态可迁移、规则自治,是 DSH 生态里把"多 Agent"变成"多人办公室"的最小一块拼图。

11 附:元信息

  • 仓库:github.com/duanyunlun/dsh-conversation-link
  • 依赖:已装入 web profile 的 package.json(当前 profile 锁定 commit afc20ae
  • 工作方式:以 bundle 层运行(声明 dsh.bundle.patch + cordis.patch.yml
  • 测试:43 个用例(node --test
  • 下一步规划:hook 订阅(相连对话事件推送)、会话头部显示 handle、跨进程传输