DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

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

@yadsh/dsh-domain-experts

Domain Experts

适用于 DeepSeek Harness 的可配置、按领域限定的专家代理

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

npx -y @deepseek-ai/dsh plugin --profile web add @yadsh/dsh-domain-experts@0.5.0
README兼容性版本

兼容性与来源证明

Domain Experts 以 @yadsh/dsh-domain-experts 发布,当前版本为 0.5.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/10/16

版本

0.5.0stable
2026/10/11
0.4.2stable
2026/10/8
0.4.1stable
2026/10/8
查看其余 10 个版本收起版本
0.4.0stable
2026/10/4
0.3.0stable
2026/9/24
0.2.2stable
2026/9/23
0.2.1stable
2026/9/22
0.2.0stable
2026/9/22
0.1.4stable
2026/9/21
0.1.3stable
2026/9/18
0.1.2stable
2026/9/17
0.1.1stable
2026/9/15
0.1.0stable
2026/9/13

相关插件

正在加载相关插件…

最新版
0.5.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
1.8 MB
文件数
134
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 2
周下载
553
安全扫描
✓ v0.5.0 扫描通过
最近提交
2026/10/12
查看源码 ↗项目主页 ↗
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 Ralph Bundle@deepseek-ai/dsh-experimental-ralph-bundle使用全新代理执行明确请求的重复工作。Hindsight Coding Agents@vectorize-io/hindsight-coding-agents面向编程代理的仅反思式 Hindsight 长期记忆(可插拔支持多种运行框架:opencode、……),自动在后台导入(无需设置 CLI)。Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层

README

Domain Experts

Give a part of your product its own expert agent: one persona, one scope, one memory namespace, one tool policy — configured in the DSH Web UI and executed as an ordinary DeepSeek Harness subagent.

Main agent
    │  domain_expert(domain="payments", task="…")
    ▼
Payments expert  ── domain_expert(domain="inventory", …) ──▶  Inventory expert
    │
    └── scoped tools, scoped memory, scoped paths

A domain expert is not a prompt preset. It is a persisted record that binds together a persona, a filesystem and knowledge scope, a memory namespace, a tool policy, a delegation policy and a model policy — and the plugin tells you, per restriction, whether it is enforced by code or merely advisory.

Features

  • Arbitrary domains. Create as many as you like — payments, inventory, platform, anything. The plugin knows nothing about your product areas.
  • Composed persona. A fixed base policy plus your instructions; the base policy (evidence classes, conflict reporting, no foreign-domain guessing) cannot be replaced by accident.
  • Scoped memory. Each expert has a private read/write namespace and read-only shared namespaces. The private boundary is a storage key layout, not a sentence in a prompt. Where the deployment has accounts, the private namespace is one per account (domain/payments/u/<account>) and the domain's own namespace stays read-only for every account — what one account's expert learned is not a rule another account inherits. A note has to say who it is true for: what only this caller's access showed (a tool that was refused, a source that was not mounted) is the caller's situation, and the key layout keeps it out of the common tiers.
  • Scoped tools. The selected tools are the only ones the expert can see or execute; a tool that is filtered out refuses to run.
  • Honest enforcement. Every filesystem rule, memory namespace and delegation target is labelled enforced or advisory, and a path restriction is only called enforced when a selected worker actually applies it.
  • Cross-domain delegation. Foreign domains are reached through their own expert (expert-only by default), with an explicit mode, target list and depth cap; the delegation chain is visible in the audit ring.
  • Extension seams. Other plugins register scope providers, memory backends and workers through ctx.domainExperts without importing plugin internals.
  • Diagnostics. A resolved-scope inspector and an expert test screen show exactly what the child will receive, including degraded configuration.

Install

Install the published npm package by name:

dsh plugin --profile web add @yadsh/dsh-domain-experts

Then open the Domain Experts row of the Host's Plugins page.

Managing domains

The tab lists every domain with its scope counts and degradations. Edit — or the card itself — opens one in the same pane: identity and status, persona, filesystem and knowledge scope, memory namespaces, tool policy, cross-domain delegation, model route, the test screen and the run history. The history lists every execution of the domain whichever surface started it — a conversation, the agents panel or the test screen — with the caller session, the delegation path and the outcome. It is read from the host's bounded in-memory audit ring (mirrored to the plugin log), so it covers the running process. All domains goes back to the list, asking first when the form holds unsaved edits, and Save writes the record in place. Every domain is an ordinary record in the plugin's storage, no matter who created it: there is no built-in expert the UI refuses to change.

Tools

The plugin registers three agent-facing tools.

ToolPurpose
domain_expertAsk one domain's expert to investigate, answer or review something. Called from inside an expert it is a delegation, and the caller's cross-domain policy decides whether it is allowed.
domain_experts_listIdentifiers, names and one-line descriptions of the enabled domains. Scope, memory and policy stay out of the model's view.
domain_memoryRead and write the calling expert's own memory. Only namespaces resolved from the persisted definition are reachable, and only the caller's own namespace accepts writes — that is the account's namespace where the deployment keeps memory per account. A write that records nothing — an acknowledgement, a placeholder, an echoed command, «nothing was found», a text too short to carry a fact — is refused with the reason, because whatever is stored is recalled into every later answer of that domain.

domain_delegate is accepted as a tool-policy alias for domain_expert so a configuration written against the design vocabulary is not reported as degraded.

Configuration

Plugin settings are live fields of this plugin's own profile configuration, and the Host serves their form for the dsh-domain-experts entry. The Domain Experts page on the Plugins panel manages the domains themselves. Changes apply to subsequent operations.

OptionTypeDefaultDescription
enabledbooleantrueRegister the agent-facing tools and serve the management UI.
subagentProviderstringspawnctx.subagents provider used to spawn expert children.
defaultMaxDepthnumber3Delegation depth cap pre-filled on new domains.
defaultMaxParallelnumber3Parallel experts allowed per calling session when the caller is not itself an expert.
defaultCrossDomainModestringexpert-onlyCross-domain mode pre-filled on new domains: disabled, expert-only or direct-read.
defaultMemoryProviderstringbuiltinMemory provider id every expert uses. Providers are registered when the plugin loads, so naming one the deployment did not start with takes a restart.
memoryDbPathstring<DSH_HOME>/domain-experts-memory.dbDatabase file the sqlite memory provider owns.
perUserMemorybooleantrueKeep a separate memory namespace per account, in a deployment that has accounts. Takes effect only while the host's accounts surface is mounted.
recallLimitnumber5Memory records recalled into an expert's persona.
auditLimitnumber200Execution audit entries kept in memory and mirrored to the log.

Where memory lives

Two carriers ship with the plugin, and a deployment selects one:

defaultMemoryProviderRecords live inCost of a write
builtinthe memory table of the plugin's storage unit — the storage backend holds the whole unit in memory and rewrites it on every changethe size of everything stored
sqliteone database file of the plugin's own (memoryDbPath), one row per recordone row

Switching to sqlite imports what the unit already holds, once, before the plugin serves anything: the copy runs in a single transaction and is checked record by record — text, tags, both timestamps — and a record that does not survive the copy fails the open loudly (STORAGE_UNAVAILABLE, naming what disagreed) instead of leaving an expert reading a half-filled database. The unit keeps its records afterwards: that copy is how a deployment goes back, and it is retired only by the operator, never by the plugin.

Ranking does not move with the carrier. Both providers score a record by how many query terms appear in its key, text and tags, order by that score and then by the newest update, and break a tie by namespace and key — so an expert that recalled three notes before a switch recalls the same three, in the same order. memory-parity.test.ts holds the two providers to that promise over a fixed query set, and it is the check to repeat on a stand before switching it.

For a deployment that manages its own data: the database needs the same treatment as the plugin's other SQLite stores — its -wal and -shm sidecars travel with it, and it is copied while the stack is stopped. A domain seed that re-seeds the storage unit no longer touches memory held by the sqlite provider.

What an expert recorded is maintenance data, not a write-once log. The service exposes a host-plane seam for it — ctx.domainExperts.memoryAdmin — which lists every namespace the enabled experts declare, searches one, corrects a record in place, and deletes one record, a named set, or a whole namespace. It is not a Remote: a browser must not hold an unauthenticated write endpoint over the store that feeds every expert's prompt, so the calling surface — the QA console in @yadsh/dsh-qa-surface, behind its own permission check — carries the identity. Writes reach only a namespace some enabled expert owns as its private one, a correction of a record that vanished meanwhile is refused instead of re-created, and an operator's edit is never filtered as a model's would be.

Domain definitions are not plugin configuration: they are durable records in the plugin's own storage domain, edited in the Domain Experts tab. That keeps an arbitrarily large expert catalog out of cordis.yml.

Cross-domain access has one effective switch: turning off allowCrossDomain also turns off the namespaces selected in directRead. They remain saved but are absent from automatic recall, the memory tools and the inspector.

A resumed expert still answers to its current domain's delegation policy. After restart or live-index eviction, the plugin reads the creation label from the Host's durable parent-owned child catalog. Missing or unreadable identity is refused with EXPERT_NOT_CALLER; a positively identified ordinary subagent keeps ordinary caller access. A catalog read has a five-second deadline and honours tool cancellation. Cold attribution recovers delegation identity, not account memory ownership: domain_memory continues to require a live expert record, and a cold delegation audit records only the known caller-to-target suffix.

Enforcement model

DSH tool filtering is capability scoping, not an operating-system sandbox, so this plugin never claims more isolation than it has. Every restriction is reported with one of two levels:

RestrictionTypical levelWhat makes it enforced
Tool policyenforcedThe harness removes the tool from the child's view and refuses to execute it.
Memory namespaceenforcedThe storage key layout keeps other namespaces out of reach; reads and writes go through the resolved namespace only. In an account-scoped deployment the writable namespace is the caller's own account, and a run nobody claimed is refused a write rather than shown the door — the namespace it would reach is what every account reads.
Delegation policyenforcedThe plugin refuses a delegation the caller's mode or target list forbids.
Filesystem scopeenforced when a selected worker declares it applies the scope, otherwise advisoryA worker that actually restricts path access (DomainWorker.enforces).
Persona wordingalways advisoryNothing but the model's compliance.

The resolved-scope inspector renders this per resource, and the degraded sections list what a domain asks for but the deployment cannot supply (SCOPE_PROVIDER_MISSING, MEMORY_PROVIDER_MISSING, WORKER_UNAVAILABLE, TOOL_UNVERIFIED, TOOL_UNFILTERABLE, DELEGATION_TARGET_MISSING).

A N degraded chip is not a broken expert, and the codes are not equally severe. TOOL_UNVERIFIED costs nothing: it is recorded for every allow-list name that is not a worker of this plugin — an ordinary tool such as read or grep — because the resolver cannot see the host's global tool registry, so it passes the name to the child unchanged and says it could not verify it. An expert that answers with status="completed" and this one code in the log had all the tools its policy asks for. TOOL_UNFILTERABLE is the code that can name a tool the expert did not get, and it names it.

Path containment is implemented once, in decidePath/resolveWithinRoot: denial wins over any allow, a path that no rule classifies is refused, and .., absolute paths, NUL bytes and symlink escapes are rejected before any match is attempted.

Note. A generic shell tool that can reach the whole machine is not constrained by a persona. Filesystem restrictions become real only through a worker that consumes the resolved scope — which is why the inspector says so.

Compatibility

  • DeepSeek Harness >=0.1.7-rc.2 <0.2.0 (tested against 0.1.7-rc.2)
  • Node ^22.19.0 || >=24.0.0
  • Browser half requires the plugins.bundle.config seat

See compatibility.json for the machine-readable form.

Development

pnpm install
pnpm --filter @yadsh/dsh-domain-experts typecheck
pnpm --filter @yadsh/dsh-domain-experts test
pnpm --filter @yadsh/dsh-domain-experts build
pnpm --filter @yadsh/dsh-domain-experts verify
pnpm --filter @yadsh/dsh-domain-experts check     # lint, typecheck, test, build, verify

docs/architecture.md maps the modules; SPEC.md is the product contract; the originating design note lives in docs/specs/design.md.

License

MIT