DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-tool-search

Tool Search

DeepSeek Harness 的工具搜索与精简:Hermes 风格的渐进式披露——按需搜索、描述并调用长尾工具,同时预先加载核心工具

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

npx -y @deepseek-ai/dsh plugin --profile web add github:Letter2025/dsh-tool-search#6132b2d693614348246e4f67461cbf4a5b5de29d
README兼容性版本

兼容性与来源证明

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

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

版本

0.1.9stable
2026/10/28
0.1.8stable
2026/10/15
0.1.7stable
2026/10/13
查看其余 6 个版本收起版本
0.1.6stable
2026/10/8
0.1.5stable
2026/9/28
0.1.4stable
2026/9/8
0.1.3stable
2026/8/14
0.1.1stable
2026/8/14
0.1.0stable
2026/8/14

相关插件

正在加载相关插件…

最新版
0.1.9
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 10
周下载
947
最近提交
2026/10/28
查看源码 ↗项目主页 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Experimental Inspector@deepseek-ai/dsh-experimental-inspector用于 Host 调试和 Client Runtime 检查的实验性跨 realm CDP hub

README

dsh-tool-search

Tool search & slimming for DeepSeek Harness (DSH): Hermes-style progressive disclosure. When your tool catalog gets large (many MCP servers or plugin tools), every tool's JSON schema is injected into the model context on every turn — wasting tokens on tools the task never uses. This plugin collapses the long tail behind three bridge tools and lets the model discover and load them on demand through a configured rerank model.

  • Core tools stay eager — file/shell/essential tools are always directly visible.
  • Bridge tools — tool_search, tool_describe, tool_call replace the deferred schemas.
  • Tiered disclosure — the visible listing shrinks automatically as the catalog grows.
  • Conversational setup — the bundled tool-slimmer-setup skill groups your tools by talking to you, and guides configuring the rerank model.
  • User or project config — groups/matcher live in ~/.dsh/dsh-tool-search.json (global) or <workspace>/.dsh/dsh-tool-search.json (per project), your choice.

Install

dsh plugin --profile web add dsh-tool-search

How it works

Inspired by Hermes Agent's Tool Search. On every turn, the plugin's system-prompt/assemble listener computes the tier and replaces the model-visible tools:

TierConditionModel sees
0Small catalog / nothing deferrableEvery tool, bridge absent
1Grouped manifest fits the budgetBridge + ## group name/description listing
2Only names fitBridge + names-only listing
3Even names overflowBridge + one line per group (name: count)

Budget = min(thresholdPct% × contextWindow, listingMaxTokens), recomputed every turn. The manifest rides a runtime context, so it survives complete-prompt composition.

Dynamic injection: searching, describing, or calling a deferred tool warms it into the session's visible set (LRU-bounded by maxWarmTools), so its full schema is injected into the context for later turns — the model pulls tools into context on demand instead of keeping everything.

When tool_call runs, the plugin executes the real tool by name through ctx.tools.execute, so approvals, guards, and session events all reference the underlying tool — never the bridge. tool_search ranks with the configured rerank matcher and falls back to keyword matching (exact name > name tokens > description tokens) when no matcher is configured or the rerank call fails.

Setup (conversational)

Ask your agent:

帮我配置 dsh-tool-search 的工具分组

The tool-slimmer-setup skill will read the catalog, propose groups, confirm with you, ask whether the config should be global or per-project, and guide you through configuring the rerank matcher (required for tool_search and preload).

Configuration

Static tuning lives in your profile cordis.patch.yml (restart to change):

- id: tool-search
  config:
    enabled: auto        # auto | on | off
    thresholdPct: 5      # listing budget as % of context window
    listingMaxTokens: 4000
    configScope: auto    # user | project | auto (project file wins when present)
    core: [todo_write]   # extra always-eager tools
    maxWarmTools: 8      # LRU cap for dynamically injected tools

Tool groups, the matcher, and preload live in the runtime file (~/.dsh/dsh-tool-search.json for user scope):

{
  "version": 1,
  "scope": "user",
  "groups": [
    { "name": "git", "tools": ["git_status", "git_diff"] },
    { "name": "mcp-github", "prefixes": ["mcp_github_"] }
  ],
  "matcher": {
    "endpoint": "https://dashscope.aliyuncs.com/compatible-mode/v1/rerank",
    "apiKey": "sk-...",
    "model": "qwen3-reranker",
    "topN": 20
  },
  "preload": { "enabled": false, "topK": 5 },
  "core": ["read_file", "write_file"]
}
  • groups: exact tool names and/or name prefixes; a tool belongs to the first matching group.
  • matcher: an OpenAI-compatible /v1/rerank endpoint — the only matcher type. tool_search returns setup guidance until one is configured.
  • preload: optional; when enabled (with a matcher), the session's first turn semantically preloads the top-K matching tools into the eager set.
  • The file is watched by mtime and hot-reloads; changes take effect on the next turn.

Bridge tools

ToolPurpose
tool_search(query, limit?)Search the deferred catalog (rerank, keyword fallback) and return ranked {name, description, group} matches; matches are injected into the visible context
tool_describe(name)Load the full schema of one deferred tool; the tool is injected into the visible context
tool_call(name, arguments)Invoke a deferred tool by real name; approvals/guards/events use the real tool; the tool is injected into the visible context

Design notes & pitfalls

  • Slimming only rewrites the model-visible surface (system-prompt/assemble); the registry stays complete, so deferred tools remain executable.
  • The bridge, the two setup tools, and skill are always eager and never defer themselves.
  • PTC (run_code) scopes keep the transport, not the declarations. Such a scope's wire table is collapsed to run_code alone, with every declaration moved into the tools:sdk prompt section — the tokens this plugin exists to slim. The plugin leaves that table alone (replacing it deleted run_code from the prompt) and re-renders the section instead: the eager core plus the bridge tools, with the deferred catalog injected as a runtime context under a run_code-aware header. The section's generator is read from its own text (interface ToolArgsMap = TypeScript, TypedDict = Python); text from an unknown generator is left untouched rather than rewritten in the wrong language. A both scope keeps run_code eager (the bridge refuses to invoke it by name) and gets the same declaration rewrite; native sessions are unaffected.
  • dsh 0.2.1-rc.3 moved two seams under this plugin. The PTC generators now live in @deepseek-ai/dsh-tool-executor-ptc and are no longer exported by @deepseek-ai/dsh-tools, so they are resolved with a dynamic import at run time — newest package first, dsh-tools as the fallback, and a harness carrying neither loads the plugin with the section rewrite disabled instead of failing the import graph. That release also hands the waterfall only sections/contexts/variables and appends its own tool table afterwards, so an assembly without a table of its own is returned untouched: on such a host the plugin ships the declaration rewrite and the injected catalog, and the table slimming applies to earlier releases.
  • Keyword matching is only a fallback: rerank is the primary ranking; without a matcher or on rerank failure, search degrades to keyword matching (exact name > name tokens > description tokens) and never errors.
  • See DESIGN.md for the full architecture.

Links

  • GitHub
  • npm
  • Design doc

License

MIT