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¶
- Enter the DSH Web configuration directory:
cd ~/.dsh/profiles/web
- Install the GitHub repository using pnpm:
pnpm add github:chenyuhao0628/dsh-web-search-router
- Edit
package.jsonin that configuration directory and add the dependency todsh.profile.bundles:
{
"dsh.profile.bundles": ["dsh-web-search-router"]
}
- Restart DSH.
- In the web search provider selection, make sure
multi-searchis 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.