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 WebSearchProvider to the ctx.web capability seam.
  • Serving the built-in web_search tool 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.

The plugin supports the following configuration items:

  • apiKey
  • baseURL
  • searchDepth
  • topic
  • includeAnswer
  • numResults

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 WebError code: 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_search to 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-web to 0.0.1-rc.1.
  • include_domains, exclude_domains, and days are 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