前言¶
在 DeepSeek Harness(DSH)里做多步任务时,主智能体常常需要把子任务交给另一个会话处理。内置委派工具能起子 agent,但父 agent 对「子角色怎么写、用哪条模型路由、能否继续委派」的控制粒度有限。若你希望每次启动子会话时都显式指定 system prompt、首条用户消息、模型白名单中的一条路由、reasoning effort,以及子智能体是否还能再开 subagent,00wz/dsh-subagent-forge 针对的是这一类需求:用一对可配置工具替代内置委派,并通过设置页维护模型 allowlist。
这是什么¶
dsh-subagent-forge 是维护者 00wz 发布的 DSH 插件(MIT 许可,当前包版本 1.2.2)。它不要求构建步骤,以纯 ESM 分发,未声明运行时或 peer 依赖。插件需要 DeepSeek Harness >=0.2.1(engines.dsh)。
定位可以概括为:用 spawn_agent / fork_agent 取代内置的 subagent / subagent_fork 一对工具;父智能体在调用时写入子会话的 system prompt(仅 spawn)、可选的首条 prompt、从 allowlist 中选定的 provider/model、reasoning effort,以及必填的 can_delegate(子智能体是否允许再委派)。
社区目录页:https://www.skillhub.cn/plugins/00wz/dsh-subagent-forge。源码与说明:https://github.com/00wz/dsh-subagent-forge。SkillHub 为独立社区目录,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
两个对称工具¶
| 工具 | Provider | 子会话行为 |
|---|---|---|
spawn_agent |
spawn |
新会话,使用你提供的 system_prompt |
fork_agent |
fork |
带入当前对话已完成的轮次;继承 system prompt 与工具集,因此不需要 system_prompt |
共享参数(含义以 README 为准):
| 参数 | 含义 |
|---|---|
description |
短标签,必填 |
prompt |
首条用户消息 / 任务;省略时使用 emptyPrompt |
system_prompt |
仅 spawn_agent:子会话的持久角色与规则 |
model |
provider/model,须为 allowlist 中的恰好一条路由;allowlist 及描述会渲染进工具说明供模型阅读。省略则继承父路由 |
reasoning_effort |
该模型 advertised 的 reasoning effort(effort 为别名) |
can_delegate |
必填:子智能体是否可再启动 subagent |
cwd |
子会话初始工作目录 |
递归与委派门控¶
插件没有固定的委派深度计数。每一层由父智能体在每次调用里通过 can_delegate 决定子智能体能否继续委派;未获授权的子智能体也会失去 workflow(因其可间接启动 agent)。在运行时允许的情况下,插件会对无授权子智能体隐藏委派类工具;否则拒绝调用。
屏蔽内置委派¶
内置委派被阻止两种方式并用:
tools.guard在所有 scope 拒绝执行subagent/subagent_fork(包括在本插件加载前已解析工具列表的步骤)。tools.restrict从各 agent 工具列表中隐藏上述工具,避免模型看到无法使用的项。
相关列表可通过配置项 blockedTools、blockBuiltinDelegation 调整。
设置页与模型 allowlist¶
设置入口:Settings → Built-in plugins → Subagent forge(Plugins 设置区中的一个标签页)。页面用于编辑模型 allowlist:每行一条路由,以及 agent 选型时阅读的 description。
首次启动时,allowlist 由当前 profile 已配置的 providers 种子生成,保证新安装即可选模型且不会提供本机不存在的路由。该快照会持久化:可在页面编辑;点 Add models from my providers 重新读取线上目录;或删除 $DSH_HOME/subagent-forge/config.json 以便下次启动重新种子。空行会被丢弃;重复路由保留首行。
校验通过后立即作用于 live tool,并写入 $DSH_HOME/subagent-forge/config.json;下次启动时该文件优先于 bundle patch。已保存文件恒生效——包括空列表:此时工具只能继承父路由。数据路径概要:
page → POST /subagent-forge/config(仅 loopback)
→ reconfigure(value):sanitize → 写文件 → 重新注册 tool
page → GET /subagent-forge/catalog
→ discoverModels(ctx):llm.listProviders → llm.listModels
路由由插件通过可选 webServer 服务自行注册;无 UI 的 headless profile 仍保留工具,但没有设置页。
子会话规格持久化¶
每个子智能体的 spec 以 JSON 保存在 $DSH_HOME/subagent-forge/children/<sessionId>.json,子会话恢复时会重新应用(插件在 agent/created 上重新注册 persona 段与限制,恢复时也会触发)。丢失该目录不会立刻打断正在运行的子会话,但后续恢复会丢失自定义 persona。
安装与启用¶
依赖 DSH >=0.2.1。README 给出的安装方式如下。
从 GitHub 仓库安装(将 <owner> 换为实际所有者,例如 00wz):
dsh plugin --profile <profile> add "github:<owner>/dsh-subagent-forge"
从本地检出安装:
dsh plugin --profile <profile> add /absolute/path/to/dsh-subagent-forge
安装后浏览器需重新加载一次以加载客户端一半;设置页在安装后也可能需要刷新一次。修改已安装包代码后需重启应用。插件在注册 webServer 的 profile 上提供设置 UI;仅以 headless 使用时仍可调用 spawn_agent / fork_agent。
安装前建议自行审阅仓库源码与 MIT 许可证;插件与当前 DSH 进程同权限运行。
典型用法思路¶
README 未给出完整对话示例,但调用形态由工具参数固定。可按下列顺序理解一次 spawn_agent 委派:
- 在设置页确认 allowlist 中各
provider/model的description,便于主智能体在工具说明里选型。 - 主智能体调用
spawn_agent,填写description、system_prompt、prompt(可选)、model(可选,省略则继承父路由)、reasoning_effort(可选)、can_delegate,以及需要时的cwd。 - 若要从当前对话分叉而非空白 spawn,改用
fork_agent:不传system_prompt,其余共享参数同样适用。
需要与 provider 配置同步 allowlist 时,在设置页使用 Add models from my providers,或删除 $DSH_HOME/subagent-forge/config.json 后重启以重新种子。
适用场景与限制¶
适合:需要在每次委派时自定义子角色 system prompt、限定可选模型路由、控制 reasoning effort,并显式关闭或开启「子智能体再委派」的团队式 Harness 工作流。
已知限制(来自 README):
- 子智能体的工具组成继承自父智能体;仅 persona 与委派授权按子会话覆盖。
- 持有委派授权的 agent 不会被屏蔽
workflow。 - 种子 allowlist 是注册 moment 的快照;变更 provider 配置后需重新发现或删除
config.json。 - 修改安装包代码需重启应用;安装后浏览器与设置页各可能需要一次 reload/refresh。
仓库内自检命令(发布包不含 test/、scripts/):
npm run check # 对已发布文本文件的 encoding 检查
npm test # 插件行为测试
结尾¶
dsh-subagent-forge 把 DSH 子智能体委派收敛到一对参数齐全的工具,并用设置页维护模型 allowlist,同时用 guard 与 restrict 阻断内置委派,避免混用两套 API。若你在 SkillHub 或 GitHub 看到更新,以仓库 README 与 package.json 中的 engines.dsh、版本号为准。