The built-in web_search tool in DeepSeek Harness (DSH) depends on a paid provider. The dsh-web-search-router plugin registers a multi-search provider in DSH. It first attempts keyless parallel search, then falls back to configured search APIs as needed or when a provider fails.

Core Features

The plugin provides the following capabilities:

  • Keyless parallel search as the first route: Uses Parallel’s Keyless Parallel endpoint.
  • Optional fallback providers: Supports Tavily, Exa, Brave Search, Serper, and SerpApi.
  • Dynamic fallback ordering: Ranks fallback providers based on estimated free capacity and observed latency. Runtime measurements may change this order.
  • Real-time quota refresh: Refreshes Tavily and SerpApi account usage, as well as Brave response-header quota.
  • Early exit: Stops immediately once enough unique results are collected.
  • Result processing: URL normalization, deduplication, and Reciprocal Rank Fusion (RRF).
  • Provider cooldown: Cooldown after rate limits, quota exhaustion, authentication, or transient errors.
  • API key management: Keys are managed in the DSH settings page.
  • No paid dependency: Does not rely on DeepSeek’s paid Web search provider.

Installation and Enablement

  1. Enter the DSH Web configuration directory:
    cd ~/.dsh/profiles/web
  1. Install the GitHub repository using pnpm:
    pnpm add github:chenyuhao0628/dsh-web-search-router
  1. Edit package.json in that configuration directory and add the dependency to dsh.profile.bundles:
    {
      "dsh.profile.bundles": ["dsh-web-search-router"]
    }
  1. Restart DSH.
  2. In the web search provider selection, make sure multi-search is selected.

Typical Usage

In DSH settings, select multi-search as the web search provider. If needed, you can enter API keys for Tavily, Exa, Brave Search, Serper, or SerpApi in the settings. The plugin automatically handles routing, deduplication, and ranking in the background.

Notes

  • Security: API keys are managed by the DSH settings page and are not stored in Cordis configuration or this repository. Do not put credentials into package.json, commit messages, issue reports, or screenshots. The browser state endpoint only accepts normalized quota metadata; third-party account loads and resolved credential values do not cross this boundary.
  • Quota management: Tavily and SerpApi support real-time refresh; Exa and Serper currently use process-local estimates (because they do not expose balance endpoints).
  • Cooldown mechanism: Providers enter a cooldown state after encountering errors (for example: HTTP 429 for 10 minutes, quota exhaustion for 6 hours, authentication failure for 1 hour).

Conclusion

dsh-web-search-router provides a flexible, free search routing alternative, suitable for scenarios that require fallback or management of multiple search providers. The author is chenyuhao0628, and the license is MIT.