DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

Experts — DeepSeek Harness 插件(DSH Plugin)
← Plugins
E

dsh-experts

Experts

将 Awesome DSH Experts 目录(experts 和 expert groups)引入 Web UI 的外部 DSH bundle:包含一个 Settings → Plugins 选项卡,以及一个可选的 composer 条目,用于注入已安装的 expert groups。不修改 deepseek-harness 源代码。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:fuchao2pku/dsh-experts#2bbca205ec97385aa4679a87653a97cda5a11ff7
README兼容性版本

兼容性与来源证明

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

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/8/20

版本

0.1.0stable
2026/8/20

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/8/18
查看源码 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

相关插件

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

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层Client Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。Client Ui Git Graph@linxin666/dsh-client-ui-git-graph外部 dsh Web GUI 插件:空会话 Git 分支选择器和 Git 图,包含实际的主机端 Git 操作与防护,作为 dsh 配置文件包

README

dsh-experts (DSH Expert Marketplace)

An out-of-tree DSH bundle that brings the Awesome DSH Experts catalog (community experts and expert groups) into the DeepSeek Harness Web UI — without any changes to deepseek-harness itself.

DSH ("everything is a plugin") ships with no first-class "Expert / Expert Group" concept. This bundle fills that gap: a Settings → section tab (the same settings.section slot the reference dshmarket client uses) to browse and copy experts, plus an optional compose-box entry to inject an installed expert group into the chat.

Overview

  • Settings → section tab — browse the catalog by category/kind, search, view details, and copy a ready-to-paste @expert <id> invocation block. Registered into the verified settings.section slot.
  • Composer entry (chat input) — an optional button that opens a picker and copies an expert/group invocation block into the chat input. Note: deepseek-harness 0.1.0-rc.6 does not expose a composer input slot, so this entry is expected to silently degrade in that version; the Settings-tab clipboard flow is the working path. The slot is configurable (DSH_EXPERT_MARKETPLACE_COMPOSER_SLOT).
  • Same-origin HTTP API — POST /api/expert-marketplace with methods bootstrap, list, detail, groups, refresh, packs, packDetail.
  • Agent tools — registers expert_list / expert_detail tools (best-effort, only when @deepseek-ai/dsh-tools is available).

Compatibility

RequirementValue
DSH versiondeepseek-harness@0.1.0-rc.6 (verified)
Profileweb (dsh.client.platform: "web")
Verified commitsee the repo's latest release tag / main HEAD
Node>=18 (host side)
React>=18 (peer, provided by the harness Web UI)

The client bundle registers via the native __ModuleLoader__.load contract and only consumes the slots, locale, theme client services, so it degrades gracefully (never crashes the Web UI) on versions where those differ.

Install / Uninstall

Install (from git):

dsh plugin --profile web add https://github.com/fuchao2pku/dsh-experts.git

Install (local dev, symlinked):

dsh plugin --profile web add /path/to/dsh-experts

Then (re)start the Web profile:

dsh --profile web web

Uninstall:

dsh plugin --profile web remove dsh-experts
dsh --profile web web   # restart to apply

Quick start

  1. Install the plugin and restart the Web profile (above).
  2. Open Settings → Expert Marketplace.
  3. Search or filter by category/kind; open an expert or expert group.
  4. Click Add to chat to copy its @expert <id> invocation block to your clipboard, then paste it into the chat input.

Example: paste @software-team followed by a feature request to invoke the multi-role software team (product-manager → architect → engineer → QA).

Configuration

All options default sensibly and can be overridden via cordis.patch.yml or environment variables:

OptionEnv overrideDefault
catalogUrlDSH_EXPERT_MARKETPLACE_CATALOG_URLthe published catalog.json (companion repo awesome-dsh-experts)
maxAgeMs—172800000 (48h)
timeoutMs—15000
maxBytes—5000000
composerSlotDSH_EXPERT_MARKETPLACE_COMPOSER_SLOTcomposer.toolbar (set to "" to disable)
composerIntegration—true
agentTools—true

Permissions & data

  • Network: the plugin's host (Node) process fetches a single pre-built catalog.json from catalogUrl (default: the companion awesome-dsh-experts repo's raw catalog.json). The browser never contacts GitHub — it only calls the same-origin POST /api/expert-marketplace.
  • Storage: catalog data is cached in-memory, best-effort in the system temp dir (<tmpdir>/dsh-experts/catalog.json), and a bundled catalog-seed.json is the offline fallback. No personal files are read or written.
  • No secrets: the plugin ships no credentials and never transmits user data off-host except the catalog fetch above (same as any web page loading a static JSON).
  • Untrusted catalog: the remote catalog is treated as untrusted input — every entry is schema-validated and never executed as code; only its human-readable text + a copyable @expert <id> hint are surfaced in the UI.

Safety design (why it won't crash your DSH install)

This bundle was written to the explicit contract: installing it must never crash the host or the Web UI. Mechanisms:

  • Zero build step — pure ESM JS, no tsdown/TypeScript compile, so there is no build failure surface and every file is directly loadable + testable in plain Node.
  • Defensive perimeters — every external input (catalog JSON, HTTP params, agent-tool args, UI entries) is validated and never throws; failures become safe empty structures.
  • Lazy optional dependencies — all @deepseek-ai/* packages and react are optional peer dependencies, imported lazily inside try/catch. Missing them degrades a feature, never the plugin.
  • Per-feature try/catch in apply() — web server route, agent tools, system-prompt section, and UI tabs are each independently guarded; one failing feature never prevents the others (or the plugin mount).
  • Bundled seed catalog — if the remote fetch fails, the last-good/seed catalog is served, so the Settings tab always renders.
  • Double-guarded composer slot — Cordis throws when registering into an undeclared slot; both the slots.inject and slots.register calls are wrapped, so a wrong slot name for a given DSH version silently degrades the composer entry while the Settings tab keeps working.
  • Same-origin API guard — cross-origin requests are rejected with a structured 403 instead of throwing.

Data source, updates & storage (experts / expert groups)

Short answer to "does dsh web load straight from the GitHub repo?" — No. The browser never touches GitHub. The host (Node) process fetches a pre-built catalog.json; the browser only calls the same-origin API /api/expert-marketplace. This mirrors how dshmarket sources its catalog.

  1. Source of truth: experts/*.md (per-expert Markdown + YAML frontmatter) in the companion catalog repo awesome-dsh-experts.
  2. Build: scripts/scan.mjs (in that repo) aggregates them into catalog.json (machine-readable, consumed by this plugin) and CATALOG.md (human-readable).
  3. Update: that repo's .github/workflows/scan.yml regenerates the catalog on every push and on a daily cron (UTC 02:00). It runs scan.mjs --local --remote (local experts are always included, plus discovery of community repos tagged dsh-expert / dsh-expert-pack) and commits the refreshed catalog.json back.
  4. Runtime load: src/host.js CatalogSource seeds from the bundled catalog-seed.json, then refreshes from cfg.catalogUrl on startup / Settings-tab open / manual refresh. Fetches are conditional (ETag / Last-Modified + 304) so re-fetching is cheap, exactly like dshmarket's registry fetch.
  5. Storage / caching (3 layers): in-memory entries; best-effort on-disk cache in the system temp dir; bundled catalog-seed.json offline fallback.

All fetch/cache failures are swallowed; the seed (or last good) wins and the UI shows a "catalog may be stale" hint.

Troubleshooting

SymptomCause / Fix
Settings tab is emptyCatalog fetch failed and seed is empty. Check network to raw.githubusercontent.com; the tab shows a "stale" hint. Restart the Web profile to re-pull.
"Failed to load plugins" on startupA client bundle didn't register via __ModuleLoader__.load. Ensure the plugin is the published version; this bundle always registers on load.
Composer button missingExpected on 0.1.0-rc.6 (no composer slot). Use the Settings-tab Add to chat clipboard flow instead.
API returns 403Cross-origin call blocked. Only call /api/expert-marketplace from the same origin (the Web UI does this automatically).

Development

# run the test suite (node --test, no external deps)
npm test
npm run test:verbose

# link into a local DSH web profile for manual testing
dsh plugin --profile web add /path/to/dsh-experts
dsh --profile web web

The bundle is plain ESM (no build). src/client.js is the browser half (ModuleLoader contract); src/host.js is the Node half (HTTP API + catalog source); src/catalog.js is the shared, dependency-free catalog model.

License & security

  • License: MIT.
  • Security model: the catalog is untrusted input — entries are schema-validated and never executed as code; only display text + a copyable @expert <id> hint reach the UI. No network egress beyond the single catalog.json fetch, no filesystem writes outside the temp-dir cache, no secrets.

Tests

npm test          # runs all suites (node --test, no external deps)
npm run test:verbose

27 tests cover: catalog model (parsing/validation/query/grouping), host route handler (every error path returns structured JSON, never throws), lifecycle (apply() survives a down network / missing services), client half (apply() never throws, degrades gracefully when slots/locale/composer are absent, never imports react in Node), and the client buildInvocationBlock.