Introduction

DeepSeek Harness (DSH) is a plugin-based framework for agent development. When using web search capabilities, large models typically participate in generating search queries, which consumes LLM tokens. The dsh-tavily-search plugin connects directly to the Tavily Search API, decoupling the search process from the large model and consuming only Tavily API quota.

Plugin Positioning

  • Name: dsh-tavily-search
  • Maintainer: ouones
  • Positioning: A DSH online tool plugin that provides web search capabilities.
  • Core capabilities: Registers as a search provider for the DSH web seam (id: tavily-official), with the tool name web-search-tavily. Implemented in pure JavaScript (ESM) with no build step.

Installation and Activation

Before installing, make sure the DSH environment is installed (officially requires Node.js 22.19+).

  1. Run the installation command in the DSH profile directory:
dsh plugin --profile web add dsh-tavily-search
  1. After installation is complete, restart the service:
dsh web

Note: If the first-time installation encounters the ERR_PNPM_IGNORED_BUILDS error, add the corresponding dependency to the allowBuilds field in pnpm-workspace.yaml in the profile directory and retry.

Configuration and Usage

After installation, the plugin is automatically mounted, but an API key must be configured before use.

1. Provide Credentials

Register on the official Tavily website to obtain an API key, and inject it using any of the following methods:

  • Environment variable: Export TAVILY_API_KEY before starting dsh web.
  • DSH credential service: Recommended method. Store TAVILY_API_KEY in the DSH credential storage.
  • Note: It is not recommended to write apiKey directly in a configuration file, as this may persist the secret to disk.

2. Override Default Configuration

The plugin defaults to searchDepth: basic and includeAnswer: true. To adjust the settings, override them in the profile’s cordis.patch.yml using the same entry id:

# ~/.dsh/profiles/<name>/cordis.patch.yml
- id: web-search-tavily
  name: dsh-tavily-search
  config:
    apiKeyEnv: TAVILY_API_KEY
    searchDepth: advanced       # basic | advanced
    includeAnswer: true         # 是否返回 Tavily 生成的自然语言回答

3. Switch Default Search Provider

If you want the default search to use Tavily and disable the official DeepSeek search (to avoid consuming LLM tokens), append the following to cordis.patch.yml:

- id: web
  name: '@deepseek-ai/dsh-web'
  config:
    searchProvider: tavily-official

- id: web-search-deepseek
  name: '@deepseek-ai/dsh-web-search-deepseek'
  disabled: true

Verification

After restarting dsh web, run the following command to verify that the configuration is effective:

dsh --profile web --dump-config

In the output, you should see the configuration for the id: web-search-tavily entry.

Notes

  • License: MIT
  • Token consumption: The search process does not consume LLM tokens; it only consumes Tavily API quota (Tavily offers a free quota).
  • Runtime permissions: The plugin runs with the permissions of the current DSH process. Review its source code and license before use.

References

  • GitHub: https://github.com/ouones/dsh-tavily-search
  • Community catalog: https://www.skillhub.cn/plugins/ouones/dsh-tavily-search