Back to directory

dsh-tool-search

In a curated listMaintenance: Active

letter2025/dsh-tool-search

Tool search & slimming for DeepSeek Harness: Hermes-style progressive disclosure — search, describe, and call long-tail tools on demand

View on GitHub
$ dsh plugin --profile web add dsh-tool-search

15

stars

5

forks

TypeScript

Language

MIT

License

2026-08-14

Created

2026-11-05

Last push

MIT-licensed DSH plugin that collapses a large tool catalog behind `tool_search` / `tool_describe` / `tool_call` with tiered disclosure, a rerank matcher and a keyword fallback — one `dsh plugin` command, config hot-reloaded from `~/.dsh/dsh-tool-search.json`.

DSH integration

Native runtime

Author-claimed

Safety audit

Unaudited

Last verified

2026-11-13

License

MIT

01What can it help you accomplish?

  • Keep a large tool catalog (many MCP servers or plugin tools) out of the context window until the task actually needs it

    Only the eager core plus the three bridge tools stay in context; deferred schemas are injected on demand and LRU-capped by `maxWarmTools`

    DSH users whose catalog has grown big enough that every turn carries tool schemas the task never uses

  • Find, inspect and invoke a deferred tool from inside a DeepSeek Harness turn

    Ranked `{name, description, group}` matches, the full schema of one tool, or the real tool executed by name so approvals, guards and session events stay attached to the underlying tool

    Developers wiring many MCP servers or plugin tools into DSH who still need them callable

  • Set up tool groups and the rerank matcher without hand-writing JSON

    The `tool-slimmer-setup` skill reads the catalog, proposes groups, asks global vs per-project, then walks through the matcher; the resulting file hot-reloads

    People who would rather talk to the agent than edit config files

02How to install into DeepSeek Harness

Prerequisites

  • A DSH install with a profile you can add plugins to — the README uses `--profile web`
  • An OpenAI-compatible `/v1/rerank` endpoint plus API key for `tool_search` and preload; keyword fallback works without one

Installation steps

  1. 01

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

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

  2. 02

    Ask the agent to group your tools — the bundled `tool-slimmer-setup` skill proposes groups, confirms with you, asks whether the config should be global or per-project, and guides the rerank matcher

  3. 03

    For static tuning (budget, `core`, `maxWarmTools`) edit the profile `cordis.patch.yml`; groups, matcher and preload live in the runtime JSON file and take effect on the next turn

Verify the integration

Not specified by the author

03DSH integration and capability boundaries

DSH integrationNative runtime

DSH plugin: a `system-prompt/assemble` listener rewrites the model-visible tool list on every turn, replacing the long tail with the `tool_search` / `tool_describe` / `tool_call` bridge

  • Bridge tools (`tool_search` / `tool_describe` / `tool_call`)

    a natural-language query, a deferred tool name, or a tool name plus arguments→ranked matches, one full tool schema, or the real tool result

    matches and described tools are warmed into the session's visible setapprovals, guards and session events reference the real tool, never the bridge
  • Tiered disclosure

    the per-turn tool catalog and the token budget→tier 0–3 listing — no bridge, grouped manifest, names only, or one line per group with counts

  • Conversational setup skill (`tool-slimmer-setup`)

    your tool catalog→tool groups, config scope and rerank matcher settings written to the plugin JSON

    writes `~/.dsh/dsh-tool-search.json` for user scope or `<workspace>/.dsh/dsh-tool-search.json` for project scope
  • Rerank matcher with keyword fallback

    a search query and an OpenAI-compatible `/v1/rerank` endpoint with model + key→semantically ranked matches; keyword ranking (exact name > name tokens > description tokens) when no matcher is configured or the rerank call fails

    the query and tool metadata are sent to the configured rerank endpoint
  • Dynamic injection (warm set)

    a deferred tool used in a turn→its full schema stays in the model context for later turns, LRU-bounded by `maxWarmTools`

    grows the model-visible tool list until the warm cap is reached

04Who is it for? When not to use it?

Good for

  • DSH users whose catalog has grown big enough that every turn carries tool schemas the task never uses
  • Developers wiring many MCP servers or plugin tools into DSH who still need them callable
  • People who would rather talk to the agent than edit config files

Not for

  • `tool_search` and preload need an OpenAI-compatible `/v1/rerank` endpoint plus an API key stored in the plugin JSON (the README example is a DashScope rerank URL with an `sk-...` key). Until one is configured, `tool_search` only returns setup guidance.
  • The seams this plugin patches move with dsh: from 0.2.1-rc.3 the PTC generators live in `@deepseek-ai/dsh-tool-executor-ptc`, a host carrying neither package loads with the section rewrite disabled, and on such a host the table slimming only applies to earlier releases.

05Compatibility, maintenance and safety notes

  • `tool_search` and preload need an OpenAI-compatible `/v1/rerank` endpoint plus an API key stored in the plugin JSON (the README example is a DashScope rerank URL with an `sk-...` key). Until one is configured, `tool_search` only returns setup guidance.
  • The seams this plugin patches move with dsh: from 0.2.1-rc.3 the PTC generators live in `@deepseek-ai/dsh-tool-executor-ptc`, a host carrying neither package loads with the section rewrite disabled, and on such a host the table slimming only applies to earlier releases.
  • Static tuning (`thresholdPct`, `listingMaxTokens`, `configScope`, `core`, `maxWarmTools`) lives in the profile `cordis.patch.yml` and needs a restart, while groups / matcher / preload live in the runtime JSON file, which is watched by mtime and hot-reloads on the next turn.
  • Rerank is the primary ranking; without a matcher or when the rerank call fails, search degrades to keyword matching (exact name > name tokens > description tokens) and never errors — results are weaker than a rerank but the turn still works.
2026-08-142026-11-05Not specified by the author

MIT · no GitHub release in the facts pack (distributed via npm), README evidence only, safety not audited

06Frequently asked questions

How do I install dsh-tool-search into DeepSeek Harness?

Run `dsh plugin --profile web add dsh-tool-search`. Static tuning — `thresholdPct`, `listingMaxTokens`, `configScope`, `core`, `maxWarmTools` — lives in the profile `cordis.patch.yml` and needs a restart, while tool groups, the matcher and preload live in `~/.dsh/dsh-tool-search.json` (or `<workspace>/.dsh/dsh-tool-search.json`) and hot-reload on the next turn.

Does it delete tools from my DSH session?

No. Slimming only rewrites the model-visible surface in `system-prompt/assemble`; the registry stays complete, so deferred tools remain executable. When the model calls `tool_call`, the plugin runs the real tool by name through `ctx.tools.execute`, so approvals, guards and session events all reference the underlying tool instead of the bridge.

Do I need an API key?

For `tool_search` and preload, yes: the matcher is an OpenAI-compatible `/v1/rerank` endpoint with an `apiKey` and `model` in the plugin JSON (the README example uses a DashScope rerank URL and `qwen3-reranker`). Until one is configured, `tool_search` returns setup guidance; without a matcher or on rerank failure, search degrades to keyword matching and never errors.

Where does the plugin write its configuration?

Tool groups, the matcher and preload go to the runtime JSON file — `~/.dsh/dsh-tool-search.json` for user scope, `<workspace>/.dsh/dsh-tool-search.json` for project scope, with the project file winning under `configScope: auto`. The file is watched by mtime and hot-reloads, so changes take effect on the next turn without restarting DSH.

What happens to the tool list on a new DSH release?

The plugin adapts per host. From dsh 0.2.1-rc.3 the PTC generators moved to `@deepseek-ai/dsh-tool-executor-ptc` and are resolved by dynamic import at run time; a harness carrying neither package loads the plugin with the section rewrite disabled instead of failing, and on those hosts the declaration rewrite plus injected catalog still ship while table slimming applies to earlier releases.

08Data and sources

  • Author-claimedgithub.combb79135c5fcc…

    This plugin collapses the long tail behind three bridge tools and lets the model discover and load them on demand throug…

  • Author-claimedgithub.combb79135c5fcc…

    On every turn, the plugin's `system-prompt/assemble` listener computes the tier and replaces the model-visible tools:

  • Author-claimedgithub.combb79135c5fcc…

    - **Bridge tools** — `tool_search`, `tool_describe`, `tool_call` replace the deferred schemas.

This page is generated from the project’s public documentation, repository metadata and a structured parse of DSH Plugins; last verified on 2026-11-13. Found an error? Submit a correction.

🏆

Best DeepSeek Harness Plugins

Twelve plugins worth installing first — picked from the whole catalog, across every category.

DSH Plugins is an independent community directory of DeepSeek Harness plugins. Not affiliated with or endorsed by DeepSeek. Third-party plugins are not security-audited — review the source before installing.

New DeepSeek Harness plugins, weekly. No spam.