具名子代理名册:设置页可视化维护角色条目(模型、persona、工具过滤、深度、后台模式),热生效;模型用 list_subagents 选人、delegate 按 id 派活,支持前台、后台与可续聊。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-subagent-library
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:MaRi23333/dsh-subagent-library
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
中文 | English
English: dsh-subagent-library is a named subagent roster plugin for the DeepSeek Harness Web GUI — manage role entries (model / persona / tool filter / depth / background mode) from a settings page, hot-reloaded, then let any conversation pick one with
list_subagentsand dispatch work withdelegate. See README.en.md for the full English version.
简介
DeepSeek Harness 的具名子代理库插件:把常用角色(代码审查、红队、多模态理解……)配成一份持久化的具名子代理名册(模型 + persona + 工具过滤),之后只需告诉主会话 agent「用 xxx 做这件事」——模型自己通过两个工具完成选人和派活:
list_subagents— 列出名册条目(id / 角色描述 / 模型),模型据此挑选;delegate— 按library_id派活:前台等待、后台 one-shot 任务、或 continuable 可续聊子代理(按条目配置)。
任何会话(任意 agent preset)直接可用,不需要 slash 命令;/subagent 命令只是给人类在命令面板里快速查看名册用的。
新增条目也不用手写配置:直接让主会话 agent 帮你配,或在设置页里可视化编辑;0.3 起 名册存储为一个具名子代理一个 YAML 文件(默认目录 ~/.dsh/subagents/),热生效、可单独注释与版本管理。
与官方能力的区分:官方
subagent工具是临时派活(每次现场描述任务),官方list_agents列的是正在运行的子代实例;本插件维护的是持久化的具名角色名册(设置页可视化编辑、热生效),模型用list_subagents选人、delegate按 id 派活。
从 0.2.x 升级? 0.3 起名册目录化(一个子代理一个 YAML 文件),旧配置自动迁移;确认无误后可按宿主版本清除旧
entries段。配置位置、失败重试和回滚边界见 MIGRATION.md,完整变更见 CHANGELOG.md。
界面
配置
0.3 起,名册是一个目录,一个具名子代理一个文件(热生效,无需重启):
~/.dsh/subagents/
k3-reviewer.yaml # id = 文件名
glm-reader.yaml
_backups/ # 备份区:agent/人改条目前先把原文件复制到这里(`_` 前缀内容插件忽略)
README.md # 可选:给操作本目录的 agent 看的约定说明
...
备份约定:插件不做自动备份;按惯例,agent(或人)在修改条目前先把原文件复制进
_backups/(命名建议<id>.<yyyymmdd-hhmm>.yaml)。_前缀的文件/目录一律视为非名册内容,插件静默忽略。名册目录里可放一份README.md给操作该目录的 agent 立规矩。
上面的插件级配置存放位置随宿主版本不同。两种正确的配置形状如下:
**DSH ≤0.1.6:**编辑 ~/.dsh/settings.yaml。
subagent-library:
entriesDir: ~/.dsh/subagents
subagentProvider: spawn
# entries:(可选,遗留)0.2.x 的内联名册在 0.3.x 仍只读兜底,文件优先生效;0.4 移除
**DSH ≥0.1.7:**编辑 web profile 的 cordis.patch.yml,在 - id: subagent-library 的 config 下配置。
- id: subagent-library
config:
entriesDir: ~/.dsh/subagents
subagentProvider: spawn
# entries:(可选,遗留)0.2.x 的内联名册在 0.3.x 仍只读兜底,文件优先生效;0.4 移除
单个条目文件(k3-reviewer.yaml):
description: Kimi K3-256K 独立只读审核,支持图片视觉走查
provider: kimi-coding
model: k3-256k
persona: |
你是运行在 Kimi K3-256K 上的独立审核 agent……
toolFilter:
deny: [write, edit, todo_write, create_goal, update_goal, subagent, subagent_fork, send_message, interrupt_agent, workflow, ralph, list_subagents, delegate]
maxDepth: 1
backgroundMode: continuable
条目字段:
| 字段 | 必填 | 说明 |
|---|---|---|
id(= 文件名) |
是 | <id>.yaml,id 须匹配 [a-z0-9][a-z0-9-]*,长度 ≤ 64(Windows 保留设备名 con/nul/aux… 不可用) |
description |
是 | 角色描述,list_subagents 展示给模型 |
provider |
否 | LLM 路由(如 deepseek-official、kimi-coding);缺省用调用方默认 |
model |
否 | LLM 模型 id;缺省用调用方的会话默认模型 |
reasoningEffort |
否 | 思考强度:适配器自有值(如 max / high / medium / low),留空随父会话默认。走官方 agentOptions.reasoningEffort 覆盖通道;子代理换了模型路由时官方会自动丢弃继承值,未显式设置不会跨模型泄漏。只接受 id 形态(字母数字与 ._-),其他值保存时被拒绝 |
subagentProvider |
否 | 子代理传输层(spawn 等 ctx.subagents provider);默认取插件级默认 spawn |
maxTokens |
否 | 子代理输出上限 |
persona |
否 | 子代理角色提示词。注意 persona 走严格的 {{…}} 模板插值(与部署 persona 同语义)——出现未注册的变量(如 {{user}})会让子代理激活失败 |
toolFilter |
否 | allow/deny 工具名单(只读角色用 deny 禁写类工具)。只读/受限角色建议把 list_subagents/delegate 也列入 deny,防止子代理被全局提示词教去链式再派活。名单在委派时按调用方会话的可限制集合解析(不是"可见"):不可应用的名字被忽略,并在派活结果与 list_subagents 目录里标注原因(本会话不存在 / 本会话专属工具)——共享条目不会因为某个会话缺该工具而整次派活失败。allow 名单若在本会话全部不可应用则拒绝委派(否则"只留这些"会变成"什么都不留")。旧注册表无 view() 时退回可见性判定,此时 scope-local 名仍会让委派明确报错。保存阶段不做校验 |
maxDepth |
否 | 委派深度上限;缺省 = 传输层支持 depthLimit 时默认 3(与官方 subagent 工具对齐,防链式递归派活;harness 自身无全局深度上限),不支持 depthLimit 的传输层则不设上限 |
backgroundMode |
否 | one-shot(默认,文件中省略)/ continuable(可续聊) |
enabled |
否 | 文件内写 enabled: false 停用该条目(目录与设置页仍可见,delegate 拒绝派活);省略或 true 为启用 |
坏文件不炸名册:解析/校验失败的文件被跳过,错误进入 list_subagents 输出、/subagent 命令与设置页的 diagnostics;.yaml/.yml 同名冲突、大写文件名等也会以诊断形式报出。
从 0.2.x 迁移:首次使用名册时,旧配置里的 entries 会逐条导出为 <id>.yaml(已存在同名文件的条目跳过,绝不覆盖手写文件);旧条目保留作回滚副本,文件优先生效。通过设置页保存时,规范 .yaml 内容未变时会跳过写入并保留手写注释;.yml 内容即使未变也会重写为生成的 .yaml 并移除 .yml,原注释会丢失。写入或收敛失败返回 HTTP 500,可能已有部分文件完成;规范 .yaml 的跳过路径若清扫同名 .yml 失败则返回 200 并带 warning,冲突诊断会持续到下次重试成功。确认无误后按宿主版本清除旧 entries 段(0.4 将停止读取)。
清理时只删除 entries 键:旧宿主保留同一 subagent-library 行的 subagentProvider / entriesDir 等其他键;新宿主保留同一 config 行的这些键,不要删除整个配置条目。0.2.8 的旧 entries 回滚副本只适用于 DSH ≤0.1.6;在 DSH ≥0.1.7 上不能单独降级插件。宿主降级和 settings.yaml.imported 数据恢复均未验证;如果需要恢复 0.3 名册内容,请从你自己建立的名册 _backups/ 备份恢复并自行核对。
注意区分两个 provider 概念:
provider指 LLM 路由(agentOptions.provider),subagentProvider指子代理传输层(ctx.subagents注册名,如spawn/fork/acp)。
宿主与桌面端兼容
0.3.1 已适配 DSH 0.1.7-rc.2 引入的 SettingsForms 设置机制;开发侧于 2026-09-30 进一步报告,它在 DSH 0.2.0-rc.2 与同版本桌面客户端中可用。名册仍采用 0.3 系列的目录化存储与原有迁移规则,没有因本次说明更新再次迁移数据。
0.3.2 为插件管理页增加随客户端语言切换的中英文名称与简介,名册和委派行为不变。更新说明见 CHANGELOG.md。
桌面客户端沿用 Web 插件界面,无需另装桌面专用包。该兼容说明依据维护者使用反馈;模型在线调用仍取决于各 Provider 的配置与服务,不能由设置页可用推断全部模型或跨平台场景已验收。
安装
一条命令,从 npm 安装(推荐):
npx @deepseek-ai/dsh plugin --profile web add dsh-subagent-library
然后重启 dsh web(关掉终端重新运行 dsh web)并刷新页面。
其他安装方式:
# 从 GitHub 安装(git-hosted 插件;仓库已提交 lib/ 构建产物,安装无需本地构建)
npx @deepseek-ai/dsh plugin --profile web add github:MaRi23333/dsh-subagent-library
# 从本地目录安装
git clone https://github.com/MaRi23333/dsh-subagent-library.git
cd dsh-subagent-library
pnpm install && pnpm run build
npx @deepseek-ai/dsh plugin --profile web add /absolute/path/to/dsh-subagent-library
仓库已提交
lib/构建产物,git 安装无需本地构建;改源码后运行pnpm run build再重启即可。 名册(~/.dsh/subagents/下的条目文件)热生效,无需重启。渠道切换:之前从 GitHub / 本地目录安装、现在想跟随 npm 发布升级时,用
npx @deepseek-ai/dsh plugin --profile web add dsh-subagent-library@latest显式取 npm 最新版。
设置页
Settings → 设置 里新增「子代理库」卡片:可视化增删改条目(描述 / Provider / 模型 /
传输层 subagentProvider / 输出上限 maxTokens / 禁用工具 / 深度 / 后台模式 / 角色提示词 / 启用开关),写回名册目录下的 <id>.yaml,热生效。
新增卡与条目卡字段一致(ID / 描述 / Provider / 模型 / 传输层 / 输出上限 / 禁用工具 / 深度 / 后台模式 / 角色提示词),一次配置完整角色;
legacy 条目带 legacy 徽标,保存时自动晋升为文件。
安全提示:子代理库的设置接口(
/subagent-library/api)遵循 DSH Web Host 的本地可信边界,插件自身不含独立身份验证层。若将 DSH Web 绑定到局域网 / 公网 / 反向代理,请在外层配置认证与访问控制,不要把该接口暴露给不可信客户端——子代理 persona 与配置可能包含内部工作规则。
设计说明
- 工具注册在 host 平面:不依赖任何 agent preset,切 preset 不会丢;
- 派发走标准
ctx.subagents缝(spawn 等 provider),子代理沿用 harness 语义:审批固定 never、沙箱继承父会话、深度上限、continuable 支持; - 名册每次操作实时读目录(无缓存、无 watcher),改文件立即生效;单条目写入为原子操作(临时文件 + rename 重试),多写者后写赢。
开发
pnpm install
pnpm run typecheck
pnpm run build # host: lib/index.js;client: lib/client.js
- 开发依赖仍锁定 DSH
0.1.0-rc.6(见 package.json devDependencies),不等于当前使用宿主版本;当前兼容范围与反馈见上方「宿主与桌面端兼容」。其他版本如接口漂移请对照 deepseek-harness 仓库 相应 tag 调整。
License
MIT。本仓库内联构建产物的第三方许可证声明见 THIRD_PARTY_NOTICES.md。
本插件是独立社区项目,与 DeepSeek 无任何隶属或背书关系;DeepSeek Harness 名称仅用于标明兼容平台。
链接
同类插件
Q00/ouroboros#integrations/dsh-plugin★ 6194
通过 DSH MCP 客户端挂载 Ouroboros 的纯配置包,在 DSH 中提供 36 个涵盖需求访谈、Seed、执行、评估与演化流程的工具。
loopx-project/loopx#dsh-loopx-plugin★ 6188
LoopX——面向长周期 Agent 的提供商中立、本地优先状态内核与控制平面:在 DeepSeek Harness 执行层之上持久化 Goal、Todo、门禁、证据、配额、恢复与交接状态;插件负责引导安装 CLI 与技能、准入有界的同会话续跑,并为精确绑定的工作循环提供本地 GoalBar。
chuspeeism/dashi-taskboard#deepseek-harness★ 3299
把当前已安装并运行中的 Codex Taskboard 嵌入 DeepSeek Harness 侧边栏,并通过 Launcher 运行时描述文件连接,而不是使用固定端口。
NanmiCoder/dsh-agent-teams★ 1959
AgentTeams 多智能体团队。
EthanYoQ/AI-Novel-Writer#dsh-ai-novel-writer★ 1347
安装专用 AI 小说创作预设与工作台:提供带修订号的本地项目资产、紧凑侧边工作台,以及需要原生审批的逐文件变更。
tong-io/tongflow#dsh-tongflow★ 1041
基于 TongFlow 的“片场”插件,用于图片、配音、音乐与视频制作:agent 为每个资产生成 TongFlow 工作流文件(.tongflow.json)并通过 TongFlow 插件执行,内嵌工作流画布,按镜头/角色/take 组织项目,附漫剧模板;以 @tongflow 开头的会话进入 Studio 界面。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。