前言¶
DSH 的理念是「一切皆插件」,agent team 也因此成了常见玩法:一个 Lead 带若干成员,各干各的活儿。但到了给成员分配能力这一步,往往只有两种做法:大家都用同一套预设,差异写在提示词里;或者直接改全局配置,改完影响所有人。前者分不清角色边界,后者改一次要回滚一次。
dsh-agent-team-roles 走的是第三条路:把每个角色做成一枚独立可选的 agent preset,再在 Web GUI 里提供一个开关式的配置面板和一条团队消息流。插件只延伸官方接口,不改 dsh 本体。作者 StarSpacePX,分类为工作流,许可证 MIT。
这是什么¶
一句话定位:给 dsh 的 agent team 的每个成员定义一个「角色」,角色本身就是一枚独立 preset,与内置的 standard / cordis / ptc / minimal 并列;插件额外提供两个会话页签——「角色」配置页和「群聊」。
它解决的问题是:成员之间的能力差异此前只能靠提示词描述,现在可以按角色显式开关工具、技能、MCP 等能力行,并单独指定模型。
核心功能¶
下面这些能力均来自插件 README,未做扩展。
- 角色即 preset。每个角色注册成一枚独立 preset,部署当前可用的预设里多一枚
team-前缀的角色 preset。 - 开关式配置面板。支持过滤、只看被改过的行、整类三态开关、分类折叠;一次手势操作合并成一条批量请求。
- 只引用,不新增。角色的能力行来自部署当前的预设,角色只改已有行,不凭空造行,也不改现有任何文件。
- 技能按角色选用。技能行的开关与顺序按角色存,宿主侧一次装配。
- 模型按角色选用。每个角色可单独指定 provider / 模型 / 推理强度;留空则跟随模板。
- MCP 开关。关掉表示该角色的 agent 看不到那台 MCP 服务器的工具,是可见性过滤,不是另起一条连接。
- 团队运行时与成员绑定。
set-team打开团队运行时,bindMembers把新建成员绑到同名角色。 - 会话页签「群聊」。不切会话即可聚合全员消息流;该页签是只读投影,不依赖任何外部数据库。
@成员派发。Lead 可以看到全部成员,@名字直接投递;任务板变化会唤醒 Lead。
安装与启用¶
安装命令来自 README 原文,在 PowerShell 中执行:
dsh plugin --profile web add github:StarSpacePX/dsh-agent-team-roles
这条命令会把插件装进 profile,并自动补进 dsh.profile.bundles,不需要手工编辑 profile 的 package.json。装完要重启 dsh:宿主侧的新代码只在新进程里存在,热加载只覆盖客户端侧。
用 git 地址安装时,pnpm 默认阻止安装期构建脚本。如果报错,把报错里提示的 allowBuilds 条目照抄进 <DSH_HOME>/profiles/web/pnpm-workspace.yaml,重跑命令即可。
本地开发时可以直接装目录:
dsh plugin --profile web add link:D:/path/to/dsh-agent-team-roles
装完确认一件事:看 GET /state 里有没有 team 段,有就说明宿主侧是新代码。
随后在会话页签栏打开「角色」页,按下面的顺序启用:
- 打开顶部的「启用智能体团队」。这一步会同时选上团队组合包并打开成员绑定,界面会回报「已生效」或「已保存,重启 dsh 后生效」。
- 点「新建角色」。新角色默认以部署当前的预设为底,在能力行表里开关工具 / 技能 / MCP,id 默认带
team-前缀。 - 把这个 preset 选给一个成员。
- 切到「群聊」页签,看全员消息流。
配置¶
配置写在 profile 的 cordis.patch.yml 的 config: 段里:
# <DSH_HOME>/profiles/web/cordis.patch.yml
config:
prefix: team-
bindMembers: false
配置项如下:
dir,默认null。角色数据目录;留空等于<DSH_HOME>/agent-team-roles。prefix,默认"team-"。新建角色时 preset id 的前缀,避免与内置 preset 撞名。bindMembers,默认false。强制打开成员绑定;改了要重启 dsh。home,默认null。dsh 数据根目录;一般留空,走DSH_HOME或~/.dsh。
数据与卸载¶
数据全部落在 <DSH_HOME>/agent-team-roles/:roles.json 做索引,每个角色一个 <id>/role.json 与 <id>/AGENTS.md。插件不改 dsh 包、不改 shipped preset、不改 ~/.dsh/settings.yaml。
卸载插件不会删数据。要彻底清干净,按顺序做:卸插件 → 重启 dsh → 手动删掉 agent-team-roles/ 目录。备份就是拷这个目录,恢复就是把目录放回去再重启。
适用场景与注意¶
适合正在用 dsh 跑 agent team、并且希望成员之间能力有明确边界的开发者:角色的能力差异落到 preset 上而不是提示词里,改动有明确的作用范围和落盘位置。
有几点需要留意:
- 插件以当前 dsh 进程的权限运行。安装前建议打开仓库检查源码,确认与自己的能力和数据访问预期一致;仓库许可证为 MIT。
- 写配置类的改动需要重启 dsh,界面上的改动只刷新页面即可。判断标准是界面回报「已生效」还是「已保存,重启 dsh 后生效」。
- 成员创建失败会永久占用这个名字。这是 dsh 本体的限制,插件修不了;要控制并发,失败后不要改名重试。
- 「群聊」页签是只读的,没有输入框;要发消息走
@成员或工具。 - 面板只提供开关,没有逐行 config 编辑器;行名悬停能看到该行的 config。
环境要求来自 package.json:Node ^22.19 || >=24,dsh >=0.2.0-rc.1 <0.3.0-0。当前版本 0.1.3。
结尾¶
这个插件的价值在于把「角色」从提示词里的描述变成了可枚举、可开关、有独立数据目录的 preset,团队运行时和成员绑定也连在同一套界面上。数据自持、卸载不丢数据、不碰 dsh 本体,适合把它当作团队协作的一层薄壳来评估。
目录页:https://www.skillhub.cn/plugins/StarSpacePX/dsh-agent-team-roles
仓库:https://github.com/StarSpacePX/dsh-agent-team-roles