Foreword

The web capabilities of DeepSeek Harness (hereinafter referred to as DSH) are exposed via the seam ctx.web. If you need to integrate web search into an agent workflow, you usually have to handle the backends, credentials, and settings of different search engines simultaneously, or even modify web.searchProvider.

dsh-web-search-plugin converges multiple search backends into a single plugin: it registers a WebSearchProvider with ctx.web, with the stable ID being dsh-web-search. After installation, you can switch engines in “Settings → Web Search” without having to change web.searchProvider.

What is this

Below is an introduction to its positioning, boundaries, and recommended usage methods.

Positioning

dsh-web-search-plugin is a unified web search plugin for the DeepSeek Harness web capability seam. It includes nine built-in backends: DeepSeek (official, default), Tavily, Brave Search, Serper, SerpApi, Exa, SearXNG, Scavio, and Firecrawl.

The plugin is maintained by X-C1811 under the MIT license.

Boundaries

  • No built-in backends for TinyFish, Google CSE, SERPJET, or standalone DuckDuckGo.
  • No custom session events written.
  • Browser-side quota queries use read-only interfaces provided by the plugin and do not directly hit the upstream.

Core Features

Unified Provider

The plugin registers only one WebSearchProvider, with the stable ID:

dsh-web-search

At startup, you can select this ID via the environment variable:

DSH_WEB_SEARCH_PROVIDER=dsh-web-search

Switch Engines within Settings

After installation, switch engines in DSH’s:

Settings → Web Search

The top-level settings partition supports a two-column layout, unsaved drafts, and a save toast. The result count is a dropdown from 1 to 20.

Credentials and Redirects

Keyed providers in the settings card provide a link to the official API key; SearXNG and Tavily keyless do not render this link.

Configuration keys such as:

apiKey
deepseekApiKey
braveApiKey

…go through the credentials domain and are not echoed back.

Results and Errors

Results from each engine are normalized to the seam’s WebSearchResult and deduplicated by URL.

Errors are mapped to:

WEB_PROVIDER_ERROR
WEB_ABORTED
WEB_PROVIDER_CREDENTIAL_MISSING

Quota Display

Tavily keyed and Brave display quota progress bars in the settings card; DeepSeek official and Tavily keyless do not display them.

Tavily keyless is free, rate-limited, and requires no account. Tavily keyed requires:

TAVILY_API_KEY

Brave requires:

BRAVE_API_KEY

This is the Brave subscription token.

Brave has no usage/billing interface; billing credits can only be viewed in the Brave API Console.

Installation and Enablement

Requirements

  • DeepSeek Harness 0.1.2-alpha.4 (latest main) or later.
  • pnpm, used to install the plugin into a profile via dsh plugin.

Install from npm

First, confirm the DSH profile is available, then execute:

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

This package is a bundle. It sets up web.searchProvider = dsh-web-search via cordis.patch.yml and disables the built-in web-search-deepseek Host plugin to avoid duplicate provider registration and the old card.

When there is no bundle declaration, dsh plugin add only writes dependencies, and the plugin will not mount.

Specify at Startup

If you want to select this seam ID for the current session, you can set:

DSH_WEB_SEARCH_PROVIDER=dsh-web-search

After the steps above, the plugin will take effect under DSH’s web capability seam and provide the “Settings → Web Search” entry.

Typical Usage

Switch Engines after Installation

  1. Install the plugin.
  2. Open DSH’s “Settings → Web Search”.
  3. Select one of the built-in engines, such as DeepSeek (official, default), Tavily, Brave Search, Serper, SerpApi, Exa, SearXNG, Scavio, or Firecrawl.
  4. If using Tavily keyless, you can enter keyless mode directly; if using Tavily keyed, configure TAVILY_API_KEY.
  5. Save settings and perform a search.

Tavily Base URL

When baseURL is not set, the Tavily base URL falls back to:

$TAVILY_BASE_URL

Browser-side Quota Query

Browser read-only:

GET /dsh-web-search/usage

Does not hit the upstream directly.

Tavily keyed Reconciliation

Tavily keyed requests:

include_usage

And uses:

GET /usage

To reconcile quotas.

Brave Billing

Brave’s billing credits can only be viewed in the Brave API Console.

Notes on Local Installation

If you install from local source code, pay attention to the path behavior of dsh plugin add.

Do not use an absolute path with dsh plugin add for Windows cross-drive installations; instead, snapshot to the same drive as the profile and use file:.

Applicable Scenarios and Notes

Suitable for developers who need to unify access to multiple web search backends in DSH. It fits scenarios where search switching, result normalization, credential redirects, and quota display are maintained within the same settings partition.

Check the source code and license before installing. The plugin runs with the current dsh process permissions, reads configuration, calls search services, and queries quotas. Please confirm DSH version meets requirements and the selected backend, key, and proxy environment meet your security boundaries before use.

Conclusion

The value of dsh-web-search-plugin lies in converging multiple search backends into a single DSH web seam: one stable ID, one settings partition, one set of result specifications.

Repository address:

https://github.com/X-C1811/dsh-web-search-plugin

If your environment uses the DSH community directory, please understand this as an independent site, not the official app store; it has no official affiliation with DeepSeek or High-Flyer.