英语 | 简体中文
dsh-leader-kit
一个领导者驱动工作和审查,所以你可以同时运行十个特性,而不是照顾每一个。
一个用于DeepSeek Harness (dsh)的leader / worker编排包。领导者分解工作,分派工作,跟踪每个工人的完成情况,检查返回的工作并进行审查;工作人员在后台完成工作,自动报告,每个任务事实都出现在按项目组织的公告板上。每个任务运行一个工作树是这个存储库的约定,而不是bundle的要求。
突出了
- 一个领导者驱动开发和审查 -你陈述一次目标。领导开卡,派遣工人,监督每个人完成工作,验证交付品并组织评审。你的注意力会回到“我想要什么”,而不是“哪个代理卡住了”;目标是同时飞行的十个特征。
- 右侧边板:看谁在工作,一目了然 -每个项目一块板。每张卡片都有它的执行者插槽和一个实时状态指示灯,它的注释呈现为Markdown,它的链接是可编辑的。点击规格卡片(目标,范围,接受度,链接),点击插槽进入代理的会话并继续交谈;工人报告在工人说话时到达,也是markdown渲染。
- 按你的意愿安排你的代理人 -两个文件做安排。
LEADER.md掌握领导的提示和项目的编排规则:边界,调度要求,验收标准。SLOTS.md为每个工作者角色提供自己的规则(dev / review /…)。在每个模型请求之前对两者进行评估,并且仅在其文本更改时追加,因此编辑文件更改行为而无需重新创建会话。 - 许多项目并行进行,每个项目有一个Leader -添加一个项目绑定一个领导者会话,并在项目树中列出领导者产生的工人;可以拖动行以重新排序,删除项目将删除插件注册的工作空间,同时保留文件夹和会话记录。项目之间互不妨碍。换一个新的Leader,现有的工人和未交付的报告将被转移,因此可以立即发送。
- 这个
leader-mode技能:用于Leader的业务流程协议 -不是“你是技术领袖”。阶段剧本跨越讨论→设计→实现和交付→审查→合并,加上并行协作和移交的指导。 - 回顾一个工人做了什么,但不要唤醒他 - - - - - -
read_worker_session直接读取工人的会话日志并返回每个回合的任务,主体,它调用的工具以及失败的原因。只读:它不会唤醒worker,也不会触发模型调用。完工通知告诉你结果是什么;这将告诉您它是如何到达那里的,因此调试不需要另一轮。
安装
桌面安装(DeepSeek Harness Desktop)
桌面使用自己的配置文件($DSH_HOME/profiles/desktop),与…分开 web。
GUI安装: 开放 插件 在左侧栏中,单击 添加插件 在右上方,键入 dsh-leader-kit 并点击 安装:
CLI安装: 该系统 dsh 拒绝管理桌面配置文件;使用与桌面安装捆绑的命令行:
# quit the app completely first (closing the window only hides it)
"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
plugin --profile desktop add dsh-leader-kit
在Windows / Linux上,使用 runtime/cli/bin/dsh 在安装目录中。该应用程序仅在启动时读取配置文件,并且一次只能挂载一个版本。 DSH_HOME 必须是绝对的还是以 ~/. 会议、项目和卡片都是共享的 web;插件包和激活是分开的。
对于这个存储库中的开发, npm run desktop 挂载当前的工作树,重新构建bundle并启动应用; -- --remove 卸载它。
网络安装
从npm安装(包名 dsh-leader-kit):
dsh plugin --profile web add dsh-leader-kit
dsh web
该概要文件必须命名 web;中不存在自定义名称 PROFILE_TEMPLATES,因此安装缺少web-app bundle,并且客户端从未加载。需要dsh >=0.2.1-rc.2 <0.3.0。
有关固定版本、删除版本、开发安装或在没有配置文件的情况下尝试版本,请参见 发展。
预览
左图:项目和每个Leader生成的工人。中心:领导会议——任务、调度、工人汇报、裁决。右:项目的交付板,每个任务有一张卡,每个执行者有一个插槽芯片。您可以看到正在工作的代理,单击其中一个以钻取其会话并直接与之交谈,而无需通过Leader。
屏幕截图显示了一个真实的工作会话。
它是如何运行的
you ──────▶ Leader (the leader session, sole commander of the project)
│ create_card record what to build and how it is accepted
│ spawn_worker create the worker session, return immediately
│ message_worker deliver the first message — that is what starts work
▼
worker ─ worker ─ worker each runs in its own project directory
│ (one worktree each is the project convention, see Prerequisites)
│ the turn end is settled by the runtime, workers submit nothing
▼
Leader wakes up ──▶ board status lights update ──▶ open any worker and keep talking
以下三种机制使其不仅仅是“更智能的提示”:
- 身份决定了刀具表面。 领袖得到
spawn_worker/message_worker;工人不。主机在创建会话时修整工具表面-不相信模型会保留。 - 完成由运行时决定,运行时唤醒Leader。 当一个worker的回合结束时,Leader会收到一个报告(呈现为worker发言),Leader没有轮询,worker也没有提交步骤。
- 工人是持久的根会话。 几个同时运行,您可以打开其中任何一个并保持对话继续,并且它们在重新启动后冷恢复。代价是:领袖阻止不了 当前的限制。
设计的权衡
- 这个项目的目的不是重建dish自己的超级代理商。它解决了一个具体问题:让一个人管理20多个会议。
- 今天的代理还不够可靠,无法在无人值守的情况下运行,因此设计假设您可以在任何时候中断或推动任何工作人员。
- 路由层运行全尺寸模型。在实践中,考虑到全球的情况,它经常在一个想法中连接几个pr,并解决单个工人看不到的问题。
- 代理业务流程一般化。卡片描述了任务本身,所以它可以在编码之外工作,并且可以使用任何技能进行作曲。
- 初始化仍然是手动的:在您自己的项目中编写
LEADER.md(领导者的角色提示和编排流程)和SLOTS.md(角色分割和每个角色的角色提示)。 - 领导和工人之间从不交谈;刀具表面排除了这种可能性。今天的代理被训练成严格遵循指令,两个代理之间的一个嘈杂的信息可能会破坏整个对话。
五个步骤
- 添加一个项目。 在左侧栏的Projects部分,单击Add project并选择一个目录。项目立即创建,并绑定到领导会议;单击项目行打开Leader(插件注册并删除的工作空间在单击时重新创建,并将会话放回)。 选择分为两层:整个行仅为当前的Leader会话亮起,而打开一个worker则在行开始处亮起文件夹,并将行高亮显示在该worker自己的会话行上。默认情况下,行开始处的槽是一个文件夹图标:当Leader运行时,它会变成一个旋转器(Leader没有自己的行,所以无论项目是展开还是折叠,它都会保持),当项目折叠时,在它下面运行一个worker,它会变成一个旋转器 同样,一旦扩张,每个工蜂都有自己的纺丝机。
- 加载协议。 在leader会话中,加载模型
leader-mode. 它读取playbooks/program.md首先是当前阶段的剧本。 - 调度。
spawn_worker需要name(一个简短的角色任务句柄);cardId+slot可选地在同一调用中绑定卡的执行器插槽。它立即返回一个会话id,而工作线程已经返回了 还没开始. 提供任务主体message_worker(sessionId+message,可以选择rename):第一个消息是开始回合,卡绑定工人自动获得卡事实添加到其请求中,因此您不需要粘贴规格。工人的沙盒模式和审批策略在调度时继承自Leader (Auto Leader也传递其审核门);收据说明工作线程实际运行的权限,并按名称调用完全访问权限。看看它是如何完成这一回合的——它使用了哪些工具,在哪些地方失败了——使用read_worker_session在它;这不会唤醒工人。 - 记录任务事实。
create_card打开卡片(title要求),update_card编辑一次(内容更改携带)expectedRevision对于乐观并发;链接可以用links或者通过id与合并addLinks),list_cards读取它们。卡片属于一个项目,并且是全局编号的;跨项目的编辑被拒绝。list_cards和create_card都是领袖的专属,而普通的会议则没有;update_card是与工人共享的。工作线程只能编辑绑定到的卡片,并且只能编辑派生字段,例如links- - - - - -title/spec/status/slots属于Leader(前两个是验收锚和注入内容,后两个决定谁执行以及卡是否计数完成)。 - 看黑板。 右侧面板中的Board选项卡为当前会话的项目抽取卡片。当领导者创造一张卡片时,它会自动打开;点击卡片查看详细信息(链接可编辑,其余部分只读),点击插槽芯片打开执行者会话。
编排存在于文件中
三个东西,每个覆盖一层。它们都只提供提示文本,不授予工具权限:
| 文件/技能 | 为谁 | 它包含什么 |
|---|---|---|
LEADER.md | 这个项目的负责人 | 如何指挥这个项目:边界,卡和调度粒度,硬约束每一个简要必须携带,验收标准。注入到领导会话中,没有绑定步骤 |
SLOTS.md | 按角色划分的工人 | 每个角色方法和角色下 ## <slot-name> (dev / review /……)。名片的 slots 字段将一个槽绑定到一个会话,该会话获得注入的段 |
leader-mode 技能 | 领导人礼宾 | 分阶段的剧本用于讨论→设计→实现和交付→审查→合并,加上并行协作和移交指导 |
LEADER.md 和 SLOTS.md 在每个模型请求之前求值,并仅在其文本更改时追加,因此更改对下一个请求生效,并且不会注入两次。这个 leader-mode 技能采用不同的路径——模型通过 skill 工具随需应变,这就是为什么上面的步骤说加载而不是配置。目标项目自己的 AGENTS.md 由主机的代理指令作为系统提示符部分读取。收牌(done / archived)释放其执行器:插槽绑定和卡事实停止一起注入。
插件只读取 LEADER.md. 一个 COORDINATOR.md 这只是指出它是外部工具(如Telov)的兼容性补丁,这些工具仍在寻找旧文件名;它永远不会被注射,否则你也不需要它。
槽名是ASCII标识符(小写字母,数字,下划线,连字符,最多32个字符);显示名称来自 slots: 顶部的前体 SLOTS.md. 一个没有 SLOTS.md 退回到默认的两个角色 dev / review。
这个 init-leader-kit Skill处理项目设置:它将存储库的工程约定合并到目标项目的托管块中 AGENTS.md,然后写道 LEADER.md (领导者如何推动这个项目)和 SLOTS.md (执行者角色)从捆绑的骨架。重新运行只替换托管块,并且在编辑之前读取两个手册。一个空目录得到TODO框架和三个仍未回答的问题——项目事实从未被发明。
对于完整的交互-槽前端的细节,存档,交换领导,如何板状态灯派生-请参阅 使用手册 (中国)。
先决条件:首先让多工作树并行工作
并行运行十个特性需要任务之间真正的隔离:每个任务一个工作树,每个任务一个dsh实例,每个任务一个数据根,所以任务永远不会覆盖彼此的插件版本或争夺会话和数据。这个库的 scripts/worktree-*.mjs 和 scripts/dev.mjs 存在就是为了这个(发展); 机制和每个着陆的位置 协作和文档 (中国)。
当前的限制
- 后台业务流程需要一个长期存在的主机 (web /桌面/ sdk)。headless是一次性CLI:当回合结束时会话被销毁,没有任何东西可以接收完成报告。
- 领袖不能阻止工人。 工人是普通的根会话,所以主机的
list_agents/send_message/interrupt_agent不适用于他们(interrupt_agent甚至返回错误的成功)。一个工作程序偏离了轨道,必须由一个人在它自己的会话中处理。这就是坚持不懈的代价。你可以读到它在做什么(read_worker_session(只读,不唤醒),但您不能为它采取行动或取消它。 - 完成报告通常取决于回合结束。 如果进程在一个工人完成之前就死了,那么这个回合就永远不会结束。重新启动后,打开worker会话并在那里继续。
- 这个板只在项目会议上显示。 领导和项目的员工看到了;同一目录下的普通会议,或者退休的领导,只会得到一个通知,而任何项目之外的会议根本没有董事会。
- 卡片详细信息只写链接。 链接可以在详细面板中添加,编辑和删除;完成,固定,重命名和删除仍然属于领导的卡片工具。卡号在全局范围内增加,并且永远不会跨项目重用或回收。
- 项目注册表只能从左侧栏访问。 该模型没有项目工具;如果目录选择器不可用,则无法创建项目并需要web配置文件。
- 项目树与官方工作空间树共存。 项目会话只在渲染时隐藏在官方树中;官方统计和搜索仍然包括它们。项目目录本身也显示为工作区行,因此从两个位置都可以访问相同的目录。
- 客户端与主机版本耦合。 对话框、菜单和图标是从主机源复制的,Typert远程通道是一个手写的协议形状,领导会话布局依赖于主机的会话视图服务,所以主机升级需要同步这个存储库。
完整的列表和权衡(状态光源,水印崩溃,头像,存档入口点,DOM注入定位等等)都在这里 已知的限制和权衡 (中国)。
发展
npm run worktree:spawn <task> # create the worktree and feature branch
cd .worktrees/<task>
npm run dev # dsh instance mounting this worktree's plugin
npm run check # full gate
npm run e2e # browser e2e
数据根、实例覆盖、构建约束和测试策略都在其中 发展 (中国);命令索引在 AGENTS.md (中国)。 npm start 运行每日实例。
贡献
读 AGENTS.md 首先:工作树规程、验证需求和文档规则存在于其中。捷径是 npm install → npm run check →打开PR。提交消息是中文的,不重要的更改会发送 .agents/notes/ 同一PR中的决策说明。
文档
| 文档 | 目录 |
|---|---|
| AGENTS.md | 存储库规则和任务路由的阅读索引 |
| 文档/ getting-started.md | 演练(中文):先决条件,添加一个项目及其Leader,两个项目文件,一张卡从创建到下钻 |
| 文档/ usage.md | 对调度、跟进、卡、板、项目管理、插槽和手册进行充分的互动 |
| 文档/ architecture.md | 层,运行时模型,数据流,持久化布局,主机-契约着陆点 |
| 文档/ limitations.md | 充分了解限制和权衡 |
| 文档/ development.md | 开发环境、实例、构建契约、测试策略 |
| 文档/ capability-gaps.md | 主机能力边界的测量证据(在接触主机端代码之前阅读) |
| 文档/ e2e-testing.md | 浏览器端通道(命令、固定装置、模拟约定、断言规则)和手动证据规则 |
| .agents / notes / | 用于重要更改的决策内存 |
| .agents /技能/ leader-mode / | 协议层:调度,切换,事件调度,卡片维护,验收 |
学分
这个设计借鉴了 光标项目实施 和 PStack的编排机制:将项目视为一级实体,汇总每个项目的会议和可交付成果,以及领导-调度/执行-报告/交付-董事会线。
还要感谢 DeepSeek Harness团队:主机插件契约,工作树,Agent Note,渐进披露和文档实践,这个存储库直接镜像。