Introduction¶
In the agent development of DeepSeek Harness (dsh), a common requirement is: wanting the built-in web_search tool to be served by Tavily, but not wanting the plugin to modify the tool schema visible to the model. coderdailyone/dsh-plugin-web-search-tavily is a DSH plugin bundle aimed at this requirement.
It registers Tavily as a WebSearchProvider into the ctx.web capability seam, allowing the built-in web_search tool in dsh to use the Tavily backend. The plugin is released as a dsh bundle; after installing to a profile, it automatically inserts the corresponding plugin row.
What is this¶
dsh-plugin-web-search-tavily is a Tavily search provider bundle used for DeepSeek Harness (dsh).
Its main functions are:
- Registering a
WebSearchProviderto thectx.webcapability seam. - Serving the built-in
web_searchtool of dsh using Tavily. - Not modifying the model-facing schema.
- Released as a dsh bundle; automatically inserts the plugin row after installation to a profile.
The repository path is coderdailyone/dsh-plugin-web-search-tavily, the license is MIT, and the package.json version is 0.1.2.
Core Capabilities¶
Below are the verified capabilities of this plugin.
Register WebSearchProvider¶
The plugin registers a WebSearchProvider to ctx.web. This means it enters the dsh capability seam layer, rather than directly replacing the tool definitions seen by the model.
Serve existing web_search tool¶
The plugin uses Tavily to serve the built-in web_search tool of dsh and does not touch the model-facing schema. For the user, the interface between the tool and the model remains unchanged; the change is the underlying search service provider.
Support Tavily search related configuration¶
The plugin supports the following configuration items:
apiKeybaseURLsearchDepthtopicincludeAnswernumResults
When apiKey is empty, the provider will be in a “registered but unavailable” state.
available check does not access the network¶
The available() check is a cheap local check and does not access the network.
Error and cancellation behavior¶
- Cancellation is represented as a
WebErrorcode:WEB_ABORTED. - Other failures are represented as
WEB_PROVIDER_ERROR.
Version and Environment¶
The current verified environment and dependency information for the plugin is as follows.
{
"version": "0.1.2",
"license": "MIT",
"engines": {
"node": "^22.19.0 || >=24.0.0"
},
"peerDependencies": {
"@deepseek-ai/cordis": "^4.0.1",
"@deepseek-ai/dsh-web": "0.0.1-rc.1",
"@deepseek-ai/schemastery": "^3.18.1"
}
}
It is worth noting: DSH is currently in developer preview; this package pins @deepseek-ai/dsh-web to 0.0.1-rc.1.
Installation and Enablement¶
Below are the installation and enablement steps in order.
1. Install to profile¶
Use the following command to install the plugin to the web profile:
dsh plugin --profile web add dsh-plugin-web-search-tavily
Since it is a dsh bundle, installing to a profile automatically inserts the plugin row.
2. Provide Tavily API Key¶
You can provide the API key via environment variable, for example:
TAVILY_API_KEY
The documentation example mentions it can be placed in:
$DSH_HOME/.env
It can also be provided via plugin config.
If apiKey is empty, the provider will be in a “registered but unavailable” state.
3. Fix selection when multiple search providers are available¶
If you have more than one search provider available in your combination, you can fix the selection to Tavily:
$DSH_WEB_SEARCH_PROVIDER=tavily
You can also modify the searchProvider of the web row by patching the current profile’s cordis.patch.yml.
If Tavily is the only available provider, the selection is automatic.
4. Verify configuration before starting¶
First, do a configuration check:
dsh --profile web --dump-config
Then start:
dsh --profile web
Typical Usage¶
Below is the minimal usage flow organized from verified examples.
First, install:
dsh plugin --profile web add dsh-plugin-web-search-tavily
Then prepare TAVILY_API_KEY. It can be placed in an environment variable or in $DSH_HOME/.env.
If there are multiple search providers, fix the selection:
$DSH_WEB_SEARCH_PROVIDER=tavily
Finally, check configuration and start:
dsh --profile web --dump-config
dsh --profile web
Configuration Example¶
You can override configuration fields by patching the web-search-tavily row in the current profile’s cordis.patch.yml.
Note: The patch replaces the entire config value, so if you want to keep certain fields, you need to rewrite them in this patch.
For example:
- id: web-search-tavily
config:
searchDepth: advanced
includeAnswer: false
This example only overrides searchDepth and includeAnswer. If you also need to keep other configuration items, you need to list them again in this patch.
Applicable Scenarios and Notes¶
This plugin is suitable for scenarios like:
- You are building agents using DSH.
- You want the underlying search service for
web_searchto be Tavily. - You do not want the plugin to modify the model-facing schema.
- You want to manage different combinations of tools via profiles.
Pre-use notes:
- The plugin runs with the permissions of the current dsh process; you should check the source code and license before installing.
- The license is MIT.
- It belongs to the DSH plugin ecosystem, not the official app store.
- DSH is currently in developer preview.
- This package pins
@deepseek-ai/dsh-webto0.0.1-rc.1. include_domains,exclude_domains, anddaysare not exposed.- There is no retry policy; a temporary Tavily failure will result in a
WEB_PROVIDER_ERROR.
Conclusion¶
The positioning of dsh-plugin-web-search-tavily is quite specific: it does not modify the dsh web_search model interface, but instead switches the backend to Tavily and registers a WebSearchProvider through the ctx.web capability seam.
If you need to enable Tavily search in a DSH profile, you can first install and configure the API key following the steps above, and check the final configuration using --dump-config.
GitHub Repository:
https://github.com/coderdailyone/dsh-plugin-web-search-tavily