dsh-multitask

workflowtested: passnpmMIT

A Multitask agent preset where the main conversation only plans, briefs subagents and summarizes results, while file reads, commands, search and builds run inside subagent contexts; four worker kinds, an approval gate for dangerous operations, and zero changes to DSH source.

下载量 / Downloads
1,790
依赖体积 / node_modules
0.81 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-multitask

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

<div align="center">

<img src="docs/image/title.png" alt="dsh-multitask" width="854">

</div>

dsh-multitask

<p align="center"><b>给 DeepSeek Harness 的「减震器模式」—— 主对话永远不碰你的代码库。</b></p>

<p align="center">

<a href="https://www.npmjs.com/package/dsh-multitask"><img src="https://img.shields.io/npm/v/dsh-multitask.svg" alt="npm 版本"></a>

<a href="https://www.npmjs.com/package/dsh-multitask"><img src="https://img.shields.io/npm/dm/dsh-multitask.svg" alt="npm 下载量"></a>

<img src="https://img.shields.io/badge/许可证-MIT-blue.svg" alt="许可证 MIT">

<img src="https://img.shields.io/badge/DSH-%3E%3D0.2.0--rc.1-6f42c1.svg" alt="DSH &gt;= 0.2.0-rc.1">

<img src="https://img.shields.io/badge/node-%3E%3D20-339933.svg" alt="Node &gt;= 20">

<img src="https://img.shields.io/badge/运行时依赖-0-brightgreen.svg" alt="零运行时依赖">

<a href="https://github.com/Senguk520/dsh-multitask/stargazers"><img src="https://img.shields.io/github/stars/Senguk520/dsh-multitask.svg" alt="GitHub Star"></a>

</p>

<p align="center">

<img src="https://img.shields.io/badge/DSH-插件-brightgreen.svg" alt="DSH 插件">

<img src="https://img.shields.io/badge/agent%20preset-multitask-blueviolet.svg" alt="agent preset: multitask">

<img src="https://img.shields.io/badge/语言-JavaScript-yellow.svg" alt="JavaScript">

<img src="https://img.shields.io/badge/平台-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey.svg" alt="平台">

<img src="https://img.shields.io/badge/状态-稳定-brightgreen.svg" alt="状态 稳定">

<img src="https://img.shields.io/badge/MIT-许可证-blue.svg" alt="MIT">

</p>

<p align="center">

<a href="README.md">English</a> · <a href="README.zh.md">中文</a> · <a href="docs/DESIGN.md">设计与实测记录</a> · <a href="LICENSE">MIT 许可证</a>

</p>

一个装进 DeepSeek Harness(DSH) 的工作模式:主对话只做三件事 —— 理解你的需求、把需求翻译成任务书下发给子代理、汇总子代理的结论。读文件、跑命令、构建、搜索、调试所产生的一切过程性数据,都在子代理的上下文里消化,永不进入主对话。主对话的上下文因此长期只留高价值信息。

这不是靠提示词请求模型「请你自己别动手」,而是机制。选中本模式后,主对话(协调者)的工具面被实际收窄:写文件、跑命令、检索这类会带来大量过程数据的工具不在它的可见面里 —— 调用不了,也就污染不了它的上下文。子代理(worker)相反:它拿到完整工具面,把活干完,只把结论带回来。

零运行时依赖,不改动 DSH 源码。

一眼看全:

能力 · 你能得到什么

协调者的工具面被收窄 · 主对话不能写文件、跑命令、搜索 —— 这些工具是真的不在,不是劝它别用

过程数据进不了主对话 · 文件内容、命令输出、构建日志、走不通的路,都只在 worker 的上下文里

四类子代理 · 完整工具面 worker、继承已完成轮次的 fork、程序化的 PTC worker、只读 worker,按任务形状挑

派活给别的模式 · 把任务书投给任意已安装的 agent preset,只收回它的结论

两级审批闸门 · 安全命令不打断;危险操作在主对话里弹卡

纠错立刻生效 · 追加一句话会先停掉 worker 的当前轮次,而不是排在错误的工作之后

模式隔离 · 多个模式可以共用一个工作区,各自只收窄自己的会话

跨会话设置 · 按 worker 类型选模型、设并发上限,都在设置里

自动修复工作区权限 · Windows 上在会话启动时补上缺的那一项权限,且只补那一项

只读元数据工具 file_info · 不读内容就能拿到字节数与文件类型,协调者能自己核对一条结论

零运行时依赖 · 不改动 DSH 源码


它和别的模式差在哪

· 主对话(协调者) · 子代理(worker)

工具面 · 只读核对 + 委派 + 结果回收 + 交互 · 完整(写文件、跑命令、构建、搜索…)

上下文 · 你的需求 + 任务书 + 结论 · 全部过程数据

职责 · 理解、翻译、下发、核对、汇报 · 干活

协调者保留的工具(白名单):

  • 只读核对 —— read grep glob file_info
  • 委派 —— subagent subagent_fork subagent_ptc subagent_minimal
  • 子代理控制 —— send_message interrupt_agent list_agents
  • 结果回收 —— job_list job_output job_kill
  • 编排 —— workflow
  • 交互与自我管理 —— ask_user_question todo_write create_goal get_goal update_goal exit_plan_mode present skill

不在上表里的工具默认对它关闭,例如 write edit pwsh web_search web_fetch read_image、ssh_、task_board_、plugin_manager。判据是补集:摘除面 = 当前可见集 − 保留集,所以宿主以后新增任何工具,默认也对协调者关闭,本插件不需要跟着改。

只读核对能力是刻意留给协调者的:它要能独立验证子代理的结论,而不是盲信回报。

模式隔离:只收窄属于本模式的会话

收窄只作用于「当前绑定的 preset 就是本 preset」的会话。同一个工作区里属于别的模式的会话,保留它自己的工具名册,完全不受影响 —— 所以你可以几个模式并用,而它们不会互相吃掉对方的工具。

把会话切出本模式,收窄会解除;在首轮之前切进来,它会在第一次请求发生之前就收窄。

presetId 就是这个归属判据。如果你改它来并排安装多个变体,那么每个变体只收窄自己的会话;而一旦它和注册的 preset id 对不上,就没有任何会话会被收窄 —— 看起来装好了,实际什么也没做。

读不到归属信息时,守卫宁可不收窄,也不冒险去收窄邻居的会话。所以注册表打个嗝的代价,最多是某一轮没被收窄,而不会是弄坏旁边那个模式。


安装

用发布包(推荐)

dsh plugin --profile <profile> add dsh-multitask

--profile 是个选项,不能省 —— 写成 dsh plugin add dsh-multitask 会直接报 error: required option '--profile <name>' not specified。<profile> 是你要装进去的 profile 名:桌面版应用自己那个叫 desktop,仓库里另一个常用的是 web;不确定就看 ~/.dsh/profiles/ 下有哪些目录。

装完后包落在 profile 的 node_modules 下,并且 DSH 会自动把 dsh-multitask 追加进该 profile 的 dsh.profile.bundles 层列表(因为本包声明了 dsh.bundle.patch)。本包自带的 cordis.patch.yml 插入的是一行裸包名,不含任何绝对路径,所以在任何机器、任何用户名、任何安装位置都成立。装完重启应用 —— bundle 层是在启动时组装的。

也可以在 DSH 的插件页面里安装(那条路不用命令行)。

桌面版(Electron)注意:装之前先完全退出应用 —— pnpm 要重写 profile 的 node_modules,应用占着里面的文件会让它失败。用应用自带的那个 dsh 启动器可以管理 desktop;而从 npm 单独装的 dsh 会被直接拒绝(error: profile "desktop" is managed exclusively by the Electron application),那种情况请用应用内的插件页面,或走下面的源码安装路径。

从源码 checkout 运行

clone 本仓库、直接跑工作区里的源码时,在 profile 的 cordis.patch.yml 末尾追加一段,用绝对 file:// URL 指向本地入口:

- insert:
    - id: multitask
      name: 'file:///你的绝对路径/dsh-multitask/lib/index.js?v=6'

两点注意:

  • 路径里的空格与 % 必须百分号编码(Windows 上尤其常见)。稳妥做法是让程序替你编码,而不是手写 —— 例如在 PowerShell 里:(New-Object System.Uri('H:\my repo\dsh-multitask\lib\index.js')).AbsoluteUri。
  • 末尾的 ?v=N 是缓存键,只在 file:// 这种方式下有意义(见「开发 → 改源码后如何生效」)。

新增这一行不需要重启:DSH 在 cordis.patch.yml 上装了 watcher,改动会被热重载。


使用

新建会话时,在模式选择器里选 「Multitask 减震器模式」,然后正常提需求即可。

模式可以在会话首轮开始之前选择;首轮还没开始的会话,也仍然可以切进或切出本模式。被冻结的是已经开始跑首轮的会话 —— 这是 DSH 的既有约束(工具面与提示词在首轮就冻结了),不是本插件的限制。

协调者会把你的需求翻译成自包含的任务书 —— 子代理看不到这段对话,所以任务书必须带上它需要知道的一切(目标、已核实的现状、项目约定、安全闸、编号任务、条件分支、停止条件、回报格式)。互不依赖的任务会并行下发,协调者一边等一边继续做事。


四类子代理

协调者有四条委派路径,差别主要在工具面:

委派工具 · 工具面 · 适用任务

subagent · 完整 · 默认。写代码、跑测试、改文件、执行类任务

subagent_fork · 完整 + 继承本对话的已完成轮次 —— 它看不到当前正在进行的那一轮,所以派单那一轮里说过的事实必须在任务书里再说一遍 · 复查、续写 —— 需要「接着这份上下文往下做」时

subagent_ptc · PTC 塌缩:只能直呼 run_code,其余工具在程序里经生成的 SDK 调用 · 程序化批量处理:海量数据的过滤/聚合/搬运,中转数据不该进上下文

subagent_minimal · 只读:摘掉写入与执行类工具,但保留 read grep glob read_image file_info skill todo_write present,并且仍然可以搜索与抓取网页 · 只读调研、快速问答、核查事实

按任务的形状挑,不按习惯挑。四条路的工具面不同,每次委派都要在协调者人格里重新判断(小节 ## Choosing which worker to delegate to)。

委派深度固定为 1:协调者

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::10,最后更新 2026-11-04

Links

GitHub · Homepage · npm

Same category