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 个平级会话纳进一张协作网做总调度:
- 开工:秘书用
conversation_list盘点可寻址会话,用conversation_link逐一起昵称连接; - 派活:给具体会话
conversation_send下任务(本文就是秘书派给笔者写的); - 盯进度:用
conversation_status不打扰地轮询各会话的 turn/step 与最近动作,不用挨个打断; - 收口:会话完成回报 → 秘书汇总 → 主人审阅;
- 立规矩:秘书给自己声明
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、跨进程传输