鱼皮AI导航
鱼皮AI导航
  • 主页
  • 社区
  • AI工具
  • AI知识库
  • AI提示词
  • MCP
  • Skills
  • AI学习资源
  • AI资讯
  • GitHub开源
登录/注册

DSH-Subagent-Model-Router

把委派给子代理的任务路由到配置好的模型:subagent_model 工具的 model 枚举即配置的别名,每条路由的标签与使用说明会注入工具 schema 与系统提示;wait-for-subagents 汇合工具等待未完成的可续跑后台子代理并返回其最终结果;在子代理头部与目录行显示当前模型标签;另有 Web 设置页、命名空间内的配置工具与引导设置技能用于管理路由。

模型接入
访问 GitHub
文档README

dsh-subagent-model-router

A DeepSeek Harness Cordis plugin for delegating subagent work to a configured model route that can differ from the parent agent's current model.

What it adds

  • subagent_model: a delegation tool whose model argument is restricted to user-configured aliases.
  • wait-for-subagents: a join tool that waits for this agent's outstanding continuable background children, including standard and model-routed delegations, and returns their terminal results.
  • Per-model tags and routing descriptions embedded in the tool schema and system prompt.
  • model_subagent_catalog: a read-only view of models advertised by registered LLM providers.
  • configure_subagent_models: a namespace-scoped model-facing tool for reading or updating this plugin's settings without filesystem access.
  • model-subagent-setup: a guided skill for selecting routes, generating routing guidance, obtaining confirmation, and saving through the constrained configuration tool.
  • Settings → Subagent Models: a Web settings page for manually adding, editing, and removing routes.
  • A hot-reloaded subagent-model-router namespace in ~/.dsh/settings.yaml.
  • Foreground execution and durable continuable background subagents.
  • An active-model chip in an opened subagent header.
  • Active-model chips in healthy rows of the parent session's subagent catalog.
  • An optional inline model chip in each existing Better Sidebar Tasks row.

With an empty models list, the catalog, configuration, and wait tools remain available alongside the settings page and setup skill, but subagent_model is not registered. This provides a bootstrap state for initial setup.

Orchestrator behavior

When model-selectable delegation is available, the system prompt tells the orchestrator not to duplicate work it delegated. After issuing all intended background delegations, it must call wait-for-subagents before synthesizing the child results or giving a final answer. The wait tool joins every continuable background child started by that parent, whether through a standard delegation tool or subagent_model; it remains useful when no model routes are configured. It preserves every terminal content block and drops retained records when the parent is disposed, while foreground calls already return their result directly. A ten-second watchdog reconciles an unresolved record against the exact live child identity and recovers its terminal reason and output from the retained epoch log when the lifecycle event was missed. If another plugin already owns or scope-shadows the wait-for-subagents name, this plugin leaves it untouched and suppresses its wait-specific guidance and tracking for the affected agents.

Model identity chips

The opened subagent header and every healthy row in its parent's subagent catalog show the configured friendly display name for the latest adapter-resolved request, falling back to the model id when that route is not in the current router settings. Hover and accessible text expose the complete provider/model route. The plugin resets the route at the child's own descriptor so a fork cannot inherit its ancestor's model, and it omits the chip until the child records an authoritative request route.

When Better Sidebar is installed, the router's client extension maps its semantic Tasks tree rows to the authoritative DSH session/catalog snapshot and appends a compact, non-interactive chip beside each subagent label. It reuses the native header/catalog projection and friendly-name formatter, preserves completed-run identity, and adds the full route to the tree row's accessible name. The observer and every injected node are lifecycle-managed and removed when the router unloads. No Better Sidebar source change, replacement tab, runtime import, or settings toggle is required; when Better Sidebar is absent, the extension is inert.

Requirements

  • DeepSeek Harness 0.1.0-rc.6 or compatible
  • The Web profile and built-in subagent conversation UI
  • A preset exposing the normal skill loader/tool
  • The Host spawn subagent provider, included by standard DSH profiles
  • Optional: a compatible dsh-better-sidebar release with its semantic Tasks tree (0.15.2 and 0.16.x are supported)

Install

▼
sh
复制代码
# From npm once published dsh plugin --profile web add dsh-subagent-model-router # Or from inside this checkout dsh plugin --profile web add .

Restart dsh web after installation and refresh the page. Open Settings → Subagent Models, or invoke:

▼
text
复制代码
/model-subagent-setup

Configure through the Web UI

The Subagent Models settings page provides controls for:

  • model alias, display name, LLM provider route, and exact model id;
  • comma-separated routing tags and the “when to use” description;
  • optional per-model output-token caps;
  • subagent backend, delegation depth, and background execution.

On DSH rc.6, the built-in Web settings API exposes only a fixed namespace allowlist. This plugin therefore uses a package-owned, same-origin Host endpoint backed by the same Settings service, schema validation, persistence, and revision conflict protection. Successful changes apply live: the old delegation tool is removed and the updated schema and prompt guidance are registered immediately.

The endpoint rejects non-loopback transport and cross-origin mutations by default. A trusted loopback reverse proxy may allow specific browser origins with the comma-separated DSH_SUBAGENT_MODEL_ROUTER_TRUSTED_ORIGINS environment variable, for example https://dsh.example.test. Requests must still arrive over loopback, and each mutation Origin must exactly match both the request Host and an allowlisted origin.

Configure through the model-facing tool

configure_subagent_models is the preferred path for agent-assisted setup:

  • action: "get" reads the current normalized settings.
  • action: "update" replaces the complete model list and optionally changes the backend, depth, or background policy.
  • The tool calls the Settings service directly and can modify only subagent-model-router; it accepts no filesystem path and cannot read or write other namespaces.
  • Updates pass the same schema and provider-capability validation as the Web UI, persist to settings.yaml, and apply live.

The update action is intentionally documented for direct user-requested changes only. The setup skill must show the complete proposed list and receive explicit confirmation before calling it.

Configure through settings.yaml

Merge the following namespace into ~/.dsh/settings.yaml:

▼
yaml
复制代码
subagent-model-router: subagentProvider: spawn maxDepth: 3 enableRunInBackground: true models: - alias: fast provider: acme model: acme-fast displayName: Acme Fast tags: [fast, routine] description: Use for quick, well-scoped tasks where low latency matters. - alias: deep provider: acme model: acme-reasoner displayName: Acme Reasoner tags: [reasoning, review] description: Use for difficult analysis, architecture decisions, and adversarial review. maxTokens: 16384

See examples/settings.yaml for a copyable document fragment. The settings file is watched; valid edits apply without changing a Cordis patch.

Settings reference

FieldDefaultPurpose
models[]Routes exposed to AI agents. An empty list leaves setup/catalog only.
models[].aliasrequiredStable selector shown in the tool's model enum.
models[].providerrequiredExact registered LLM provider route.
models[].modelrequiredExact model id interpreted by that provider.
models[].displayNamealiasHuman-readable label in routing guidance.
models[].tags[]Lowercase kebab-case routing tags.
models[].descriptionrequiredOne sentence describing when to use this route.
models[].maxTokensprovider defaultOptional cap for an initially created or resident child. DSH rc.6 does not restore it after a continuable child is cold-resumed.
subagentProviderspawnSubagent execution backend, not the LLM provider.
maxDepth3Maximum delegation depth enforced by the backend.
enableRunInBackgroundtrueEnable durable background children and default to them.

The delegation tool is always named subagent_model. Legacy toolName values from versions before 0.4 are ignored and are removed the next time the namespace is saved.

The live catalog is advisory: some adapters accept model ids they do not advertise. Manually entered ids remain allowed but should be user-confirmed.

Known limitations

DSH rc.6 has no additive slot inside a subagent catalog row, so the plugin owns the existing subagent-catalog header cell to render row chips. It claims that cell by registering at priority: -1 — a list cell renders its lowest live priority, and the host's own entry sits at the default 0. The subagent-model cell is registered the same way so a host build that also fills it stays shadowed rather than clashing. Catalog interaction changes in DSH must be mirrored here until the host exposes a row extension slot or renders subagentModelRoute itself.

Better Sidebar currently exposes tab and file-viewer registration but no additive seam inside its built-in Tasks rows. To keep the feature wholly owned by this plugin, the router targets only Better Sidebar's semantic root/tree/treeitem attributes and the public DSH sessions snapshot; it does not depend on CSS-module class names. An incompatible change to that semantic DOM may require a router update. The router deliberately contributes no fallback topology tab, keeping one authoritative task tree.

Development

▼
sh
复制代码
pnpm install pnpm test

Project layout:

▼
text
复制代码
dsh-subagent-model-router/ ├── lib/ │ ├── index.js │ ├── client.js │ └── model-catalog.js ├── skills/model-subagent-setup/SKILL.md ├── examples/settings.yaml ├── test/ │ ├── client.test.js │ ├── model-catalog.test.js │ └── plugin.test.js ├── cordis.patch.yml └── package.json

The Client bundle is plain window.__ModuleLoader__.load(...) JavaScript and requires no build step.

License

MIT

模型接入

快捷安装

复制到终端去安装插件

dshplugin--profilewebaddgithub:CypherNaught-0x/DSH-Subagent-Model-Router

温馨提示

装插件等于在本机跑第三方代码,权限与你相同,能读文件、用凭据、访问网络,工具审批管不到。请只装可信来源,并尽量锁定 commit。

站长:程序员鱼皮 老鱼简历 商务合作 增值电信业务经营许可证
2026 鱼皮AI导航 | 沪ICP备19026706号-6
站长:程序员鱼皮 老鱼简历 商务合作 增值电信业务经营许可证
2026 鱼皮AI导航 | 沪ICP备19026706号-6
dsh 插件推荐
dsh-subscriptions
通过 OAuth 将 ChatGPT Codex、Claude、Grok 与 Antigravity 订阅注册为 DeepSeek Harness 的 LLM 提供方,无需为其配置 API Key。
dsh-zhipu-toolkit
智谱 BigModel GLM 双端点模型目录(Coding Plan 与普通 API),支持实时模型发现与实测校准的思考档位映射,提供凭据、端点与默认推理档的可视化设置卡片。
dsh-qwen38-compaction-fix
针对 NInfer 托管的 qwen3.8-27b 网关的压缩修复:在 dsh 上下文压缩与会话标题调用中关闭思考,避免 xhigh 推理耗尽全部输出预算;同一思路适用于其他启动方式,本包仅面向 NInfer。
dsh-model-sync
一键同步 / 自动同步供应商模型列表,与 /v1/models 保持一致。
dsh-openrouter-provider-advisor
按量化、速度、缓存重度价格、上下文和可用率为当前 DSH 模型推荐 OpenRouter 供应商,并支持一键切换以帮助降低 token 成本。
🔥热门工具
朱雀AI检测朱雀AI检测
朱雀AI检测助手朱雀AI检测助手
LovartLovart
老鱼简历老鱼简历
WritePass官网WritePass官网
面多多面多多
CursorCursor
星月写作星月写作
零感AI零感AI
墨得问题墨得问题