Preface

In DeepSeek Harness (dsh), the web-search capability is registered to the ctx.web seam via a provider. If you wish to switch between Tavily and DeepSeek search, directly modifying the web line triggers lifecycle side effects: changing the web line configuration restarts the dsh-web plugin and releases the registered providers.

dsh-web-search-tavily is a Tavily-backed search provider bundle maintained by nitrazepam01. It registers a Tavily backend for dsh and provides a hot-swappable backend selector. Below is an introduction to the problems it solves, installation methods, configuration, and precautions.

What is it

dsh-web-search-tavily is a plugin bundle for DeepSeek Harness. Its core goals are:

  • Register a Tavily backend for the ctx.web web-search seam;
  • Place a delegating provider named search-switch behind the web line;
  • Keep backend selection in the settings layer to support Tavily / DeepSeek search hot-switching.

The plugin is licensed under MIT.

Core Features

Tavily provider

The Tavily provider calls POST /search and normalizes the results to:

{ url, title, snippet, publishedAt }

When the backend is selected as tavily, the results carry content excerpts. When the backend is selected as deepseek-official, it delegates to the web-search-deepseek provider provided with the bundle, and results do not include excerpts.

Hot-switch backend selector

search-switch is a delegating provider located after the web line. It parses the current backend from the web-search settings section on every search.

Takes effect immediately after saving the web-search section:

  • No restart;
  • No loader-row reload.

The reason for using a delegating provider instead of directly modifying the web line is that modifying the web line configuration restarts the dsh-web plugin and releases all registered providers. search-switch keeps the selection in the settings layer to avoid this side effect.

Credential parsing chain

The credential parsing chain is:

literal apiKey -> credentials service -> launch environment

Where apiKey is a literal key, belonging to a secret, stored via the credentials domain; the default value for apiKeyEnv is TAVILY_API_KEY.

Error types

The plugin supports the full WebError taxonomy, including:

  • WEB_PROVIDER_ERROR
  • WEB_PROVIDER_CREDENTIAL_MISSING
  • WEB_ABORTED

Installation and Enabling

Install from git:

dsh plugin --profile web add github:nitrazepam01/dsh-web-search-tavily

Install by name:

dsh plugin --profile web add dsh-web-search-tavily

Install from local checkout:

dsh plugin --profile web add ./dsh-web-search-tavily

After installation, you need to restart dsh web because bundle layers are frozen at boot.

Uninstall:

dsh plugin --profile web remove dsh-web-search-tavily

Documentation indicates this plugin is plain JS, no build step, no allowBuilds requirement.

Typical Usage

1. Configure credentials

Store the Tavily key in $DSH_HOME/.credentials.yaml:

TAVILY_API_KEY: tvly-your-key

This step provides the TAVILY_API_KEY available to the credential service for the credential parsing chain.

2. Select backend

Set the backend in the web-search section of $DSH_HOME/settings.yaml:

web-search:
  backend: tavily            # tavily | deepseek-official

Optional values:

  • tavily: Uses the Tavily provider from this plugin, results include content excerpts;
  • deepseek-official: Delegates to the shipped web-search-deepseek provider, results do not include excerpts.

Takes effect immediately after saving the section, no restart required, and no loader-row reload.

3. Tavily options

Tavily options are located in the web-search-tavily section, containing the following configuration items:

web-search-tavily:
  apiKey:
  apiKeyEnv: TAVILY_API_KEY
  baseURL:
  maxResults:

Field descriptions:

  • apiKey: literal key, belongs to a secret, stored via the credentials domain;
  • apiKeyEnv: credential reference name, default value is TAVILY_API_KEY;
  • baseURL: Tavily REST endpoint;
  • maxResults: maximum number of results per search.

4. Check combined configuration

Start the service, and only view the combined configuration:

dsh --profile web --dump-config

This step is used to confirm that sections like web-search and web-search-tavily enter the combined configuration as expected.

Use Cases and Precautions

Suitable for the following situations:

  • Using dsh and wishing to add Tavily search to ctx.web;
  • Wishing to switch backends between tavily and deepseek-official;
  • Wishing to switch backends without restarting or triggering a loader-row reload;
  • Wishing credentials to be parsed via apiKey, credential service, or launch environment.

Precautions:

  • Must restart dsh web after installation, because bundle layers are frozen at boot;
  • apiKey is a secret and should not be committed to a repository at will;
  • Changing the web line configuration restarts the dsh-web plugin and releases registered providers;
  • Do not interpret the plugin directory as the DeepSeek / Huanquan official app store; this article only discusses the dsh plugin itself;
  • The plugin runs with the permissions of the current dsh process; source code and license should be checked before installation.

Links

GitHub repository:

https://github.com/nitrazepam01/dsh-web-search-tavily

The directory page URL was not provided in verified materials, so it is not included in this article.