dsh-bulletin
DeepSeek Harness (DSH) plugins for peer-to-peer AI session collaboration and communication across workspaces on one computer. 同机 AI 会话跨工作区对等协作与通信:公告、消息投递、侧栏面板。
- Stars
- 2
- Language
- JavaScript
- Created
- Oct 3, 2026
- Updated
- Oct 4, 2026
Introduction
dsh-bulletin
让一台电脑上的 AI 们,跨会话、跨工作区实现消息互通与协作。
会话之间是对等的:没有队长,可互相派活,像一栋楼里的几个部门互相通信与协作。
一次跨工作区协作 · 会话之间是平级对等的 · 快速开始 · 文档
Peer-to-peer communication and collaboration between AI sessions across workspaces on one computer. Built for DeepSeek Harness , with announcements, desk-to-desk tickets, and a sidebar panel. Sessions are peers: no lead agent, and any desk can hand work to another—even across workspaces and drives. A reference implementation; docs in Chinese.

① 同一台电脑上的两个工作区;中间是 My Game 里 01 桌的会话。② 同一张桌可以有好几个会话:这三个都是 02 桌。③ DSH_workspace 里的 03 桌发了一条公告,面板显示有 7 个会话见过它。④ 01 桌下一轮就收到了,写进了自己的处置表。
① Two workspaces on one computer. ② One desk, several sessions: all three belong to desk 02. ③ Desk 03 posts an announcement; seven sessions have seen it. ④ Desk 01, in another workspace, picks it up on its next turn.
dsh-bulletin 是一组 DeepSeek Harness(DSH) 插件。各会话继续在自己的工作区里干活,唯一的前提是它们在同一台电脑上;插件只在它们之间加了三样东西:
| 📢 公告 | 📮 单子 | 🗂️ 面板 |
|---|---|---|
| 发一行,所有会话下一步都会收到;新开的会话会补看仍在有效期内的公告。 | 给某张"桌"(一个长期角色)留一句"有这件事,详见这里"。那张桌下一个开始干活的会话会取走它,只有一个会话能取。 | 在侧边栏查看公告、投递状态与健康信息,也能直接发布、编辑、删除公告。需要第三方插件 dsh-better-sidebar。 |
[!NOTE] 这是从实际使用中整理出来的参考实现:用之前要布置一个共享的"办公室"目录、定好桌号分工并配置插件。最省事的做法是让你电脑上的 agent 来装。
🏢 一次跨工作区协作
"桌"是一个长期角色。会话标题开头的 01-、02- 就是桌号;同一张桌可以由好几个会话承接,和会话的工作区在哪无关。"单子"是发给桌号的一句话加一个详见位置,不是任务进度表。
新开的会话还没有桌号时,会被公告引导去读办公室说明,然后问你它属于哪张桌;你同意了,它才改标题:

例如,01 桌在 D:\MyGame 做游戏开发,02 桌在 D:\Workbench 维护环境,办公室放在 D:\my-office:
- 01 发现一个需要 02 处理的问题,把详细说明放进
D:\my-office\00-通用\信箱\02\。 - 01 用
dispatch_ticket投给02,附一句摘要和说明文件的位置。 - 02 开始下一轮工作时收到单子,按指针去读说明。
- 有结果要交给 01 时,02 放进 01 的信箱,再发一张指向结果的单子。
短消息也可以直接指向已有的文档,不必另建文件。插件负责通知,信箱里的文件由参与者自己写入;取走不等于做完。

面板的「投递」页。下面:02 桌把日志里发现的报错投给 04,已被 04 取走。上面:04 修好后回了一张单子给 02,还在待取。
The ticket view: desk 02 reports a bug to desk 04 (taken); desk 04 replies after fixing it (still waiting).
💡 为什么需要它
它们不共享记忆,却共享后果。
几个会话共用一台电脑,就会碰到相同的文件、工具和环境。一个改了东西,另一个还按旧信息工作;一件事需要交接,只能让人来回转述。dsh-bulletin 不替它们做决定,只给这些已有的参与者几条信息通道:公告通知大家,单子联系某一张桌,信箱放要交给别人的文件。
消息通道只在加载并配置了插件的 DSH 运行环境里起作用。其他 profile 或独立实例需要各自安装配置;本项目不会自动连接其他 AI 应用。
🧳 不需要什么
前提只有一个:参与的会话都在同一台电脑上,用的是装了这些插件的 DSH 运行环境。其余的都不用迁就它:
| 担心 | 实际上 |
|---|---|
| 要把工作区搬到一起? | 不用。各会话照常在自己的工程、笔记库或工作台里干活,路径随意,跨盘符也行(D:\MyGame、E:\notes 都可以)。 |
| 一张桌只能有一个会话? | 不用。同一张桌可以先后换好几个会话(02-环境维护1、02-环境维护2),也可以同时有好几个,单子谁先来谁取走。 |
| 要有会话一直开着? | 不用。会话关了、压缩了、重开了都不影响:单子挂在桌上,不挂在会话上。 |
| 要联网、注册或付费? | 插件本身都不用。运行时它们不访问外网,只读写你磁盘上的几个文件,外加面板在本机问公告插件"这条有几个会话见过"。只有安装时要从 npm 取依赖(zod、schemastery 和侧边栏)。DSH 自己怎么连模型,不在此列。 |
| 要先立一个"队长"? | 不用,它本来就不是那种东西,见下一节。 |
所以"一个项目开一个新会话、换个工作区"的习惯完全没问题:新会话把标题改成 NN-名字,下一轮就进了办公室。
🤝 会话之间是平级对等的
别的方案在解决"怎么让一个指挥官指挥更多的人";这里解决的是"几个本来就住在一起、谁也不认识谁的家伙,怎么共用一间屋子"。
"住在一起"不是比喻:它们真的共用同一台电脑、同一块磁盘、同一堆脚本,所以同步和共享不是可选项。
生态里已经有做多智能体协作的插件(官方有实验性质的 agent-team,社区也有几个)。它们和 dsh-bulletin 是两种组织方式,没有优劣之分:
| Agent Teams 类 | dsh-bulletin | |
|---|---|---|
| 结构 | 有队长,分层 | 没有队长,平级 |
| 放大的是平台的什么 | 主代理 / 子代理 | 平台里没有的东西:"对等"只能靠约定造出来 |
| 模型要操心什么 | 怎么调度:派给谁、谁等谁、怎么汇合 | 只操心"这句话要不要说" |
| 消息发给谁 | 由模型路由 | 不用路由:认了桌,"投给 02"就是一个明确的地址 |
| 信息怎么流动 | 下达、上报 | 平级收发,像几个部门之间的收发文 |
| 像现实里的 | 一个项目经理带一个小组 | 一栋写字楼 |
更完整的对照见 docs/01 第七之二节。
📋 适用前提
- 本机已有能正常运行的 DSH;参与协作的会话使用装了这些插件的运行环境。
- 你选定一处办公室目录,并定好桌号与角色,例如
01-游戏开发、02-环境维护。 - 共享区里有公告文件、本机办公室说明和各桌信箱;各会话仍然留在自己的工作区。
配置里的 workspaceRoot 在本文示例中指办公室根目录,不是要你改变会话实际的工作区。
[!IMPORTANT] 要往信箱交付文件的会话,得写得到办公室目录。DSH 默认的
workspace-write权限只能写本会话的工作区,所以工作区不在办公室里的会话,往信箱放文件会被拒;这时可以把它切到"完全权限"(输入框下方的权限选项),代价是平台的审批在完全权限下会直接放行。插件不会替会话的文件工具授权。公告和单子是插件自己写的,不受这条影响,所以不想放宽权限时,也可以只用公告和指向已有位置的单子。
🚀 快速开始
方式一:让本机 agent 帮你装
把本仓库地址,或者下载好的仓库目录,交给一个能读文件、能在本机执行操作的 agent。它可以是 DSH 会话,也可以是你平时用来整理电脑环境的其他 agent;后者只是安装助手,不会因此接入办公室的消息通道。
先把下面的路径和分工换成你自己的,再把整段发给它:
请阅读 dsh-bulletin 的 README、三个插件的 cordis.patch.yml,
以及 examples/一个最小办公室/,帮我在这台电脑上安装和配置。
办公室目录:D:\my-office
桌号与分工:01-游戏开发、02-环境维护
需要侧边栏面板:是
先确认我实际在用的 DSH 安装、版本和 profile,再按 README 的"方式二:手动安装"办理。
保留已有配置,不移动各会话的工作区;建立共享区、信箱和本机办公室 README,
确认需要交付文件的会话写得到信箱(写不到就先告诉我,由我决定要不要放宽权限),填好各插件的配置。
如果要装面板,先按我的 DSH 版本选好兼容的 dsh-better-sidebar。
完成后告诉我:实际装到了哪里、哪些步骤已经完成、哪些要我退出或重启 DSH 后才能继续。
最后按"验证安装"检查认桌、公告和一次投递;第一条办公室公告先给我看草稿,我同意后再发布。
办公室放在哪、有哪几张桌,由你决定,agent 猜不出来。如果安装需要先退出 DSH,agent 应该先把配置和后续步骤准备好,等你退出、重新打开后再继续验证。
方式二:手动安装
1. 下载仓库,确认要装到哪个运行环境
在 GitHub 上点 Code → Download ZIP 并解压,或者用 Git:
git clone https://github.com/southsnowL/dsh-bulletin.git
cd dsh-bulletin
后面的安装命令都在仓库根目录执行。三个插件还没有发布到 npm;仓库根目录本身不是插件包,要分别安装 plugins/ 下面的三个包。
下文的 dsh 指你实际在用的那套 DSH 提供的命令,<profile> 换成正在用的 profile 名称。普通 CLI 安装还需要 pnpm 在 PATH 上,插件管理见 DSH 官方说明。
如果你用的是 DSH Desktop
先启动一次 Desktop,让它建立自己的运行环境。再在应用菜单的"管理 dsh 命令…"(在"检查更新…"下面)里注册 Desktop 配套的 dsh 命令,然后新开一个终端,运行 dsh --version 确认能用。这套命令用 Desktop 内置的 pnpm,不需要另装 pnpm;npm 装的另一套 dsh 不能修改 Desktop 的 desktop profile。
下文的 <profile> 对 Desktop 来说就是 desktop。执行插件管理命令前,先完全退出 Desktop(关窗口可能只是隐藏),装好、配好之后再重新打开。具体以你安装的版本为准,见 Desktop 官方说明。
2. 建立办公室
下面以 D:\my-office 为例。参考最小办公室示例,把其中的 00-通用 复制到你选定的办公室目录,再按自己的桌号建信箱:
D:\my-office\
├─ README.md 本机办公室说明:位置、桌号分工、协作约定
├─ 00-通用\
│ ├─ 公告.md 从示例复制,保留格式和规则说明
│ ├─ 投递状态.md 插件生成,不要手改
│ └─ 信箱\
│ ├─ README-信箱怎么用.md 从示例复制
│ ├─ 01\
│ └─ 02\
└─ 交付区\ 可选:给用户的成品
01-游戏开发、02-环境维护 的工作目录可以留在原来的位置,不必搬进办公室。复制过来的 公告.md 末尾有一条格式示例,用完删掉;示例里的 说明-这里是空的.md 只是 Git 空目录的占位文件,也可以删掉。
[!WARNING] 所有文本文件(公告、说明、
cordis.patch.yml)都要存成不带 BOM 的 UTF-8。Windows PowerShell 5.1 的Set-Content -Encoding UTF8会加 BOM,而 BOM 会让 DSH 出错,见 04。
这里的 README.md 是你电脑上的办公室说明,不是本仓库这份介绍。新会话会被公告引导去读它,所以至少写清:办公室在哪、桌号分工、怎么认桌,以及公告、信箱和交付的约定。
一份最小的本机办公室 README
# 我的 DSH 办公室
## 一、位置与角色
办公室在 D:\my-office;各会话保留自己的工作区。
01:游戏开发。02:环境维护。
## 二、加入与协作
准备长期参与的会话,把标题改成 NN-名字,例如 01-游戏开发。
定向通知用 dispatch_ticket,填目标桌号、一句话摘要和已经存在的详见位置。
要交给别人的文件放进对方的 00-通用\信箱\NN\,再投单通知。
信箱按"别人投递、主人读取"的约定使用;这不是文件系统的权限隔离。
办公室的公共信息放在 00-通用;给用户的成品放在交付区。
公告先给用户本人看过、同意后再追加;已有公告由用户决定改不改、删不删。
投递状态由插件生成;取走不等于做完,不发没有信息量的回执。
3. 安装插件
三个包各自独立,装哪个看你需要哪个(announce 和 dispatch 互相不依赖;面板是可选的,见下):
| 包 | 装什么 | 包页面 |
|---|---|---|
dsh-bulletin-announce | 公告通道 | npm |
dsh-bulletin-dispatch | 跨桌单子 | npm |
dsh-bulletin-panel | 侧栏面板(可选,依赖 dsh-better-sidebar) | npm |
# 从 npm 装(不用先克隆仓库)
dsh plugin --profile <profile> add dsh-bulletin-announce
dsh plugin --profile <profile> add dsh-bulletin-dispatch
已经在本地克隆了仓库的话,也可以装本地目录(改完代码立刻生效,适合改插件的时候):
dsh plugin --profile <profile> add file:./plugins/dsh-bulletin-dispatch
dsh plugin --profile <profile> add file:./plugins/dsh-bulletin-announce
本地目录要用 file: 前缀,pnpm 会一并装好插件自己的依赖(直接写目录路径等于建符号链接,不会装依赖),说明见 pnpm 官方文档。
[!NOTE] 安装时 pnpm 会提示"peer 依赖没满足"(
@deepseek-ai/dsh-*)—— 那是正常的,不用管: 那些包由 DSH 自己提供,插件不该自己装一份(装错版本反而会让插件加载失败)。
要用面板,先装侧边栏,再装面板。侧边栏的版本要和你的 DSH 对上,下面两个组合都实测跑通过:
| 你用的 DSH | 宿主 | 侧边栏版本 |
|---|---|---|
官方 DeepSeek Harness 0.2.0-rc.2 | dsh-web-app 0.2.0-rc.2 | 0.24.1 |
DSH Desktop 0.10.0 | dsh-web 0.1.7-rc.2 | 0.22.1 |
# 侧边栏按上表选版本,这里以官方 DSH 0.2.0-rc.2 为例
dsh plugin --profile <profile> add dsh-better-sidebar@0.24.1
dsh plugin --profile <profile> add dsh-bulletin-panel
侧边栏的仓库里有按 DSH 版本选版本的说明:0.2.0 线的 DSH 用 0.24.1 起的版本,0.1.7 线(比如 Desktop 0.10.0)固定 0.22.1。版本线不对时,侧边栏可能被 DSH 启动时的预检静默禁用,表现就是重开 DSH 后右侧栏没有"办公室"卡片。只用公告和单子时,侧边栏和面板都可以不装。
4. 配置同一间办公室
配置写在目标 profile 自己的 cordis.patch.yml 里,不要写进下载下来的插件目录。它在 DSH 数据目录的 profiles/<profile>/ 下,即 $DSH_HOME/profiles/<profile>/cordis.patch.yml;数据目录不一定是程序的安装目录。Windows 上通常是 C:\Users\<你>\.dsh\profiles\<profile>\cordis.patch.yml(<profile> 按你实际用的填,常见是 desktop;社区壳 DSH Desktop 的数据目录是 %APPDATA%\dsh-desktop\harness\)。改之前先备份一份。
下面三项对应三个插件已经登记的条目(插件自带的 cordis.patch.yml 用 - insert: 登记过了),profile patch 里按 id 写这三条,就是更新它们的配置。合并进现有的文件:已有相同 id 时更新那一条,其他插件的配置保持不动。Cordis 会整份替换该条目的 config,不会逐键合并,所以要写全你需要的字段。
- id: bulletin-dispatch
name: dsh-bulletin-dispatch
config:
workspaceRoot: 'D:\my-office'
deskNames:
'01': 游戏开发
'02': 环境维护
statusFile: 'D:\my-office\00-通用\投递状态.md'
- id: bulletin-announce
name: dsh-bulletin-announce
config:
workspaceRoot: 'D:\my-office'
announcementFile: 'D:\my-office\00-通用\公告.md'
hint: '办公室说明见 D:\my-office\README.md,请先阅读桌号分工和共享约定。'
- id: bulletin-panel
name: dsh-bulletin-panel
config:
workspaceRoot: 'D:\my-office'
announceFile: 'D:\my-office\00-通用\公告.md'
statusFile: 'D:\my-office\00-通用\投递状态.md'
allowWrite: true
把所有 D:\my-office 换成你的办公室路径。announcementFile 是公告插件的字段,announceFile 是面板的字段,两者指向同一个文件;示例统一写绝对路径,免得两个包的相对路径规则混在一起。没装面板时,去掉 bulletin-panel 这一项。
装好、配好之后,重启实际在用的 DSH 运行环境,再刷新界面。更多配置见三个插件分别是什么和各包的 cordis.patch.yml。
✅ 验证安装
- 新建两个普通的顶层会话(或者直接用你已有的长期会话),各发一条消息,再把标题分别改成
01-游戏开发、02-环境维护。下一轮,会话应该收到对应的认桌提示;可以让它报告自己的桌号,再核对状态表里的对应行。 - 从面板发布第一条公告,说明办公室的位置、桌号和本机说明文件;没装面板时,可以让 DSH 会话用
announce工具发(先给你看草稿)。让另一个会话开始下一步,确认它收到了。 - 在 02 的信箱放一份测试说明,从 01 用
dispatch_ticket投给02:desk、summary、ptr三项都必填,ptr写那份文件的绝对路径(插件只检查不为空,不会替你确认文件存在)。让 02 开始下一轮,确认收到单子,再看投递状态.md里的取走记录。收件的一方也可以随时用list_tickets查本桌还有哪些待取。 - 装了面板时,确认"办公室"卡片显示的是同一份公告和投递状态。
[!NOTE] 单子只会出现一次:被取走以后,取走它的会话下一轮就不会再看到它,同桌的其他会话也看不到。这是设计,不是丢了;要回看,去
00-通用\投递状态.md,那里记着谁投的、谁取走的。
认桌、公告和投递要分别检查。没收到消息时,先核对实际的 profile、插件是否加载、标题前缀和文件路径。
🚫 几个刻意的"不做"
- 不跟踪做没做完。 单子挂在桌号上,插件不催办、不要回执,也不会主动唤醒空闲的会话。同一进程里的领取保护,不等于重启后或跨独立实例的全局唯一。
- 不替你搬文件,也不做权限隔离。 信箱靠协作约定和实际的文件权限;附件由参与者自己放进去。
- "公告要用户批准"是约定,不是闸门。 面板的编辑和删除有确认、写入有版本检查;但
announce工具和直接改文件都拦不住,所以我不假装拦住了。 - 删除要有据,但不做撤回。 删除前,面板会告诉你有几个会话的"见过"记录里有这条;删完在删除记录里留一笔。已经见过它的会话收不到任何通知。"见过"只说明它进过那个会话的上下文,不代表 AI 读懂了或照做了。
- 不是调度器。 没有队长:参与者是几个平级的长期会话,谁要别的桌办事就自己投单子,插件不替谁分派、不等结果、不汇总。调度、催办、自动巡检派单和其他 AI 应用的桥接都不在范围内,取舍过程见取舍与放弃。

📚 文档
想参考这条路线,先读思路;想跑起来,按上面的安装和验证步骤,再查最小示例和配置说明。
| 文档 | 内容 |
|---|---|
| 01:思路 | 为什么用办公室、桌号、信箱和单子 |
| 02:三个插件分别是什么 | 插件职责、配置项与命令 |
| 03:机制详解 | 认桌、消息送达、领取与派生视图 |
| 04:平台笔记与踩过的坑 | 实测环境、平台行为与版本范围 |
| 05:取舍与放弃 | 保留、取消或暂停的功能及理由 |
| 06:经验与教训 | 误判、静默失败与开发复盘 |
| 07:可视化面板 | 公告操作、删除记录与界面边界 |
| 一个最小办公室 | 目录骨架、公告格式与信箱约定 |
实测环境:Windows,上面「安装插件」里的两个组合都跑通过,完整版本和时间见 04。接口和兼容性可能变化;本仓库不含开发时的内部自测,也不承诺版本之间平滑升级或持续支持。
📄 许可与署名
作者 southsnowL。本项目采用 Apache-2.0,可以使用、修改、分发和商用;再分发时请按许可的要求带上 LICENSE 和 NOTICE,并在改过的文件里注明改动。第三方说明见 THIRD_PARTY_NOTICES.md。
如果愿意在自己的项目介绍里留一句"基于 dsh-bulletin",我会很感激;这不是许可之外的额外条件。
💬 一些碎碎念
我不太常开新会话,更多是固定在一些长期会话里,这样能够保持上下文连续性和整套架构,且 AI 不会失忆,不用反复复述一些历史背景。我自己喜欢给 agent 制定"办公室制度",它们会自主地记录自己的工作轨迹和笔记,开新会话只需要指路它去哪张"办公桌",它读一遍文件夹就可以恢复记忆、快速衔接后续流程;同时哪怕是旧会话,也不用担心反复压缩上下文出现"AI 幻觉"。
想要开发的起因是每次电脑/软件环境变化、通用的工具、一些常见 bug 等等出现时,就要在每个 AI 会话和不同的 agent 间充当邮差,想做的东西还没做出来,tokens 就先在人工当传话筒的过程里烧完了。我搜了一些这方面相关的插件,大部分都是 agent 间的多代理调度,对等的 agent 会话间的协作插件较少。于是想,能不能把这套我自己的"办公室制度"做成插件?这样我就可以不再充当邮差,只需要做裁决者。
开发这套插件集来自我自己的日常使用需求,由两个 DSH 会话并行推进,中后期收拢到一个长期会话持续迭代;DSH 侧主要处理后端,Codex 和 Claude 参与前端开发与交叉审查。我负责整体架构、实现思路、协作机制的取舍、细节反馈和最终验收。
dsh-bulletin 我自己搭了 Codex 桥,按理来说换成其他 agent 软件也是能桥接的,但是每个人常用的 agent 各不相同,就没有分享出来。
本仓最重要的我觉得不是代码和插件,而是思路和判断,详见 思路,因为它本身就不为通用而做。
如果这个项目对你有帮助,欢迎点个 ⭐ Star 收藏支持。