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
- 01
Run `dsh plugin --profile web add dsh-tool-search`
$ dsh plugin --profile web add dsh-tool-search
- 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
- 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 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 bridgeTiered 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 scopeRerank 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 endpointDynamic 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.
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.
07Related DSH workflows
archify
by tt-a1i
Turn any idea, plan, or codebase into a beautiful interactive diagram. An agent skill for Claude Code, Codex, and more.
openviking
by volcengine
Self-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.
aitoearn
by yikart
Let's use AI to Earn!
learn-harness-engineering
by walkinglabs
Harness engineering beginner tutorial, from 0 to 1
08Data and sources
This plugin collapses the long tail behind three bridge tools and lets the model discover and load them on demand throug…
On every turn, the plugin's `system-prompt/assemble` listener computes the tier and replaces the model-visible tools:
- **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.
