DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Plugin Subagent Roster — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
P

dsh-plugin-subagent-roster

Plugin Subagent Roster

DeepSeek Harness 的子代理名册:为各个角色固定系统提示词和模型路由,按任务形态在批量工作与团队协作之间进行分流,并提供同一岗位的不同性格与能力档位代理。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:121212165/dsh-plugin-subagent-roster#24f55f2f788b93905938a5d5fb391ecaeba75d10
README兼容性版本

兼容性与来源证明

Plugin Subagent Roster 以 dsh-plugin-subagent-roster 发布,当前版本为 0.2.2。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/10/18

版本

0.2.2stable
2026/10/18

相关插件

正在加载相关插件…

最新版
0.2.2
DSH
*
HMR
重启进程
Tree shaking
已声明 sideEffects: false
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 1
周下载
0
最近提交
2026/10/18
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 agents-orchestration 分类下经过校验的插件。

Headless@deepseek-ai/dsh-headlessdsh one-shot bundle:基于 dsh-base 的直接核心 Agent/Session 运行器,不包含 Host、HTTP 或浏览器层Experimental Agent Team Profile@deepseek-ai/dsh-experimental-agent-team-profile在一个实验性捆绑包中提供 Agent Teams 协作、工具和 Web UIExperimental Ralph Bundle@deepseek-ai/dsh-experimental-ralph-bundle使用全新代理执行明确请求的重复工作。Subagent Codex@deepseek-ai/dsh-subagent-codex基于官方 app-server 协议的一次性 Codex 子代理提供程序

README

dsh-plugin-subagent-roster

A constrained subagent roster for DeepSeek Harness. Every role has a pinned system prompt, a pinned capability range, and a pinned model tier — and bulk work and team work are reached through tools of different shapes.

The problem

DSH's built-in subagent tool gives a child the parent's identity and the parent's whole toolset. Real delegation therefore fails in three predictable ways:

  1. Identity leaks — the child carries the parent's persona into a narrow job, and its output shape is whatever the model felt like.
  2. Capability leaks — you wanted a file read; the child has a shell. You asked for a review; it edited the code.
  3. Model does not match the job — a 200-item extraction and a load-bearing design decision run on the same (usually most expensive) model.

This plugin turns all three from prompt requests into structural constraints:

ConstraintMechanismEffect
System prompteach delegation puts the role persona on the request; it becomes the child's persona-prefix sectionidentity is decided by the role, never by the parent
Capabilitythe request's toolFilter.allowa reviewer has no write tool at all — it cannot edit even if asked
Modelthe request's agentOptionsbulk runs cheap, review runs adequate, team runs strongest
DepthmaxDepth: 1 and a filter that never grants subagent*a role child is a leaf; no recursive fan-out

Two lines

  • Bulk line — one item per call, launched in parallel, children have no tools at all. Field extraction over 20 records, per-item validation, per-item rewriting.
  • Team line — planning, building, reviewing, retrieving, assembling. Each role has a different capability range, and no role can stand in for another.

All 20 roles: role reference (中文).

Install

# from GitHub (source is the artifact; no build authorization needed)
dsh plugin --profile <your-profile> add github:<owner>/dsh-plugin-subagent-roster

# or from a local checkout
dsh plugin --profile <your-profile> add /path/to/dsh-plugin-subagent-roster

The bundle applies one plugin row. The parent agent gains one delegate tool whose role enum is the whole roster, so it pays for one schema instead of twenty. dsh --profile <name> --dump-config should show the subagent-roster row.

Operations page (define your own roles)

While a profile runs, the plugin serves a loopback page:

http://127.0.0.1:4317/

Add or delete roles, change a role's position, temperament, tier or capability range, and edit the persona — the child's system prompt — directly. Saving applies immediately, no restart: the page replaces the delegation tool registration and the routing section, and rolls back to the previous roster if the new one fails to mount.

Roles live in $DSH_HOME/subagent-roster/roles.json, seeded from the shipped twenty on first start. The file is a normal document: editing it by hand is supported.

  • Port is the plugin's pagePort setting; 0 disables the page.
  • No authentication, bound to 127.0.0.1: it grants the same file authority a local shell already has. Do not expose it on another interface.
  • Every save is validated as a whole: kebab-case ids, known tier/capability/line values, and role invariants (a reviewer that can write is rejected). A rejected document never overwrites the file.

Deterministic entry point (no "should I delegate?" decision)

Measured: letting the parent model decide whether to delegate is unreliable on free models (see test report §3). So the decision moves to the entry point — drive it by item count:

node bin/roster-fanout.mjs \
  --profile <your-profile> \
  --role batch-exact \
  --items-file items.json \
  --contract 'one JSON object {"text": <the item>}' \
  --expect-json \
  --concurrency 3 \
  --out results.jsonl
  • N items in, N role-children out — the shape is a property of the invocation, not the model
  • Each answer is read from the child's tool_result event, never from the parent's paraphrase
  • --expect-json validates the contract; a child that errors, returns nothing, or returns invalid JSON fails the item
  • Non-zero exit when any item failed, so a script or CI job can gate on it

The contract is enforced by --expect-json, and the contract text is delivered inside the child's task (outside it, the child never sees it). Measured 8/8 compliant on the cheapest bulk-tier model. A failed check is a failed item, never prose passed off as success.

Configure model tiers

Every model id in the composition resolves from the environment, so one package serves several deployments:

VariablePurpose
ROSTER_PROVIDERprovider route shared by all four tiers
ROSTER_BATCH_MODEL / ROSTER_BUILD_MODEL / ROSTER_REVIEW_MODEL / ROSTER_TEAM_MODELmodel id per tier
ROSTER_BATCH_MAX_TOKENS and friendsoutput ceiling per tier

Any single row can also be overridden by id in a profile's cordis.patch.yml.

Plugin settings

FieldDefaultMeaning
modeadvisoryadvisory warns; strict refuses to load a self-contradicting roster
providerdeepseek-officialprovider the tiers resolve against
allowedModels[]when non-empty, any tier resolving outside this list is a violation
routingGuidancetrueregister the bulk-vs-team routing section into the parent prompt

Verify

npm test                          # 18 unit tests, zero model calls
node bench/run.mjs --repeat 1     # real runs against a local OpenAI-compatible gateway

Bench verdicts come from the gateway's request log, not from answer text: which persona the child actually ran with, whether its model equals the tier model, whether its tool count equals the role's grant, and whether negative cases really left the workspace untouched.

  • Design notes: docs/design.md
  • Test report: docs/test-report.md
  • Review: docs/review.md

Compatibility

  • DSH >=0.2.0-rc.2 <0.3.0
  • Node >=22.18
  • Plain ESM JavaScript artifact, no build step

License

MIT