Introduction¶
DeepSeek Harness (DSH) uses a plugin-based architecture, and ctx.web is the key seam for integrating web search capabilities. When using third-party search services (such as Tavily), developers typically need to handle API key configuration, parameter mapping, and the complex parameter-tuning process. @junjiangao/dsh-web-search-tavily is a Tavily-based WebSearchProvider that solves the burden of cumbersome key management and provides a native configuration form containing only the parameters that improve retrieval quality.
Plugin Overview¶
This plugin provides a Tavily search provider for DSH’s ctx.web capability. It does not own ctx.web, nor does it register model-facing tools (that is, it does not register dsh-tool-web).
The core value of this plugin lies in:
* Keyless mode: No API key needs to be provided anywhere (configuration files, settings pages, credential systems, or environment variables); requests run directly in Tavily’s keyless mode.
* Native configuration form: A configuration card is registered on DSH’s Plugins page and only renders the parameters that affect retrieval quality.
* Safe configuration: The form uses grouped design and dependency-driven control logic to prevent configurations that cause Tavily to return 400 errors.
Installation and Enablement¶
This plugin is distributed as a standard bundle and must be installed using the dsh plugin command.
1. Install the plugin¶
Run the following under the target profile:
dsh plugin --profile <name> add github:junjiangao/dsh-web-search-tavily
2. Enable the Tavily provider¶
Registering a provider and selecting a provider are two different things. The web seam determines which provider to use through the searchProvider field. Make sure to specify this in the profile’s cordis.patch.yml:
- id: web
config:
searchProvider: tavily # 必须显式指定,以覆盖默认的 deepseek-official
Note: The environment variable DSH_WEB_SEARCH_PROVIDER takes effect only when searchProvider is not configured in the web entry.
Core Features¶
Keyless mode¶
At runtime, the plugin does not send an Authorization header and does not set x-tavily-access-mode: keyless. It uses the dsh-web-search-tavily-keyless client source for requests.
Parameter reduction and grouping¶
The form is divided into three sections: Credentials / Retrieval / Advanced.
* Credentials: Contains apiKey (key) and apiKeyEnv (environment variable reference).
* Retrieval: Contains searchDepth, includeDomains, excludeDomains, language, and filterByLanguage.
* Advanced: Contains includeDomainsMode and includePublishedDate; this section is collapsed by default.
All other Tavily parameters (such as topic, timeRange, maxResults, autoParameters, etc.) remain at Tavily’s default values and are not displayed in the form, but can be overridden through a profile patch.
Prevention of misconfiguration¶
The form implements dependency control. For example, when language is not set, filterByLanguage is locked and an explanation is shown (because Tavily returns a 400 error). When includeDomains is not set, includeDomainsMode is also locked.
Configuration Reference¶
Form fields¶
| Section | Field | Description |
|---|---|---|
| Credentials | apiKey |
A directly entered key (not recommended; it will be masked in configuration files) |
| Credentials | apiKeyEnv |
An environment variable reference, such as TAVILY_API_KEY |
| Retrieval | searchDepth |
Precision/latency/cost trade-off: basic, fast, advanced, ultra-fast |
| Retrieval | includeDomains |
Search only the specified domain list |
| Retrieval | excludeDomains |
Exclude the specified domain list |
| Retrieval | language |
Result language filter |
| Retrieval | filterByLanguage |
Strict language filter; must be used together with language |
| Advanced | includeDomainsMode |
restrict (domains only) or prefer (weighted domains) |
| Advanced | includePublishedDate |
Include publication date (default true, helps the model judge timeliness) |
Infrastructure parameters¶
The following parameters are not displayed in the form because they relate to infrastructure or default behavior:
* baseURL: Defaults to https://api.tavily.com; can be overridden by an environment variable or a patch.
* topic, timeRange, maxResults, includeAnswer, includeRawContent, autoParameters, exactMatch, country, etc.
Notes¶
- Dependency requirements:
- DSH version 0.2.x (0.2.0-rc.1 or later) must be installed.
- Node.js ^22.19.0 || >=24.0.0 is required.
- Runtime permissions: The plugin runs with the permissions of the current DSH process. Please review the source code and license (MIT) before installing.
- Data source: This plugin only registers a provider; it does not register tools. Actual data retrieval is handled by
ctx.weband the underlyingdsh-tool-web.
Conclusion¶
Through Keyless mode and a streamlined configuration form, this plugin lowers the barrier to integrating Tavily search while ensuring robust retrieval configuration. To view the directory or source code, visit SkillHub or GitHub.