DeepSeek Harness (DSH) injects web capabilities into the model through ctx.web. The deepseek-official search provider included with DSH consumes the model API’s billing quota. Tavily is an independent search API with its own quota system. The dsh-web-search-tavily plugin registers a Tavily backend with ctx.web, allowing the model to use Tavily for retrieval when calling the web_search tool.

Core Features

This plugin registers a tavily provider with the DSH web surface. The main capabilities include:

  • Search depth and configuration: Supports basic and advanced search depth settings, and allows controlling the number of returned results and request timeout via maxResults and timeoutMs.
  • API Key management: Supports resolving TAVILY_API_KEY from an environment variable or a credentials file (~/.dsh/.credentials.yaml). It also supports providing a literal value directly in the configuration (the literal takes precedence over credential resolution).
  • Result normalization: Returns structured results {url, title?, snippet?, publishedAt?}, supports URL deduplication, and remains consistent with other web providers in DSH.
  • Error handling and cancellation: Throws a standard WebError (with codes such as WEB_PROVIDER_CREDENTIAL_MISSING, WEB_PROVIDER_ERROR, and WEB_ABORTED). Supports cancellation via AbortSignal; the cancellation signal is merged with the plugin’s own timeoutMs, enabling in-flight requests to be truly terminated.

Installation and Activation

Before installing, the following prerequisites must be met:

  • DSH version >= 0.1.2-alpha.2
  • git and pnpm are available on PATH
  • A web surface profile exists (the default name in DSH is web)

Use the official installation command:

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

Restart DSH after installation for the configuration to take effect.

Configuration

Credential Configuration

Provide TAVILY_API_KEY using one of the following methods:

  1. Environment variable:
    export TAVILY_API_KEY=tvly-...
  1. Credentials file:
    Edit ~/.dsh/.credentials.yaml and add the following under refs:
    TAVILY_API_KEY: tvly-...

Parameter Configuration

Override the default configuration through the user patch layer (~/.dsh/profiles/<name>/cordis.patch.yml):

- id: web-search-tavily
  name: '@my-dsh/dsh-web-search-tavily'
  config:
    # Search depth: basic (1 credit) or advanced (2 credits)
    searchDepth: advanced
    # Maximum number of results returned per request (default 8)
    maxResults: 5
    # Request timeout in milliseconds (default 30000)
    timeoutMs: 20000
    # Literal API key (leave empty to use credential/environment variable resolution)
    # apiKey: tvly-...

Use Cases

This plugin is suitable for scenarios where you need to separate “model billing” from “search service billing,” or where you need precise control using Tavily’s independent quota.

Ecosystem Background

DSH follows an “everything is a plugin” architecture. The community catalog has no official affiliation with DeepSeek or High-Flyer. This plugin is maintained by my-dsh and is released under the MIT License.