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

  1. 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.
  2. Runtime permissions: The plugin runs with the permissions of the current DSH process. Please review the source code and license (MIT) before installing.
  3. Data source: This plugin only registers a provider; it does not register tools. Actual data retrieval is handled by ctx.web and the underlying dsh-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.