When developing agents in DeepSeek Harness (DSH), web access is often limited by the stability or quota of a single search provider. If the web_search tool encounters an unavailable upstream service or an invalid key, the call usually fails. This article introduces chendefine/dsh-web-search-aggregation, which integrates multiple search providers such as AnySearch, TinyFish, and Tavily into a single entry point and improves availability through a priority queue and ordered fallback mechanism.
Core Features¶
- Priority Queue and Ordered Fallback: The plugin queues multiple search providers in order. When a search is initiated, requests are tried from the top of the queue downward, and the first provider that successfully returns a result wins; if a provider fails, the plugin automatically falls back to the next provider.
- Multi-Key Pool Rotation: Each provider supports configuring multiple API keys (separated by commas). The plugin automatically rotates between these keys to distribute load and quota pressure.
- Budget Awareness and Transparent Failures: Each search attempt has an independent timeout deadline (default 10 seconds), preventing upstream service hangs from consuming the global budget. If all attempts fail, the error message reports the failure details for each provider, making troubleshooting easier.
- Key Hygiene and Live Configuration: The plugin does not log the exact contents of keys; it only references the key labels. All queue order, keys, endpoints, and timeout settings can be edited in real time through the settings card without restarting the service.
Installation and Enablement¶
Environment requirement: Node.js ≥ 22.19.
Install via npm:
dsh plugin --profile web add dsh-web-search-aggregation
Install via GitHub:
dsh plugin --profile web add github:chendefine/dsh-web-search-aggregation
Or install via the DSH interface: Settings → DSH Plugin Marketplace.
Note: After installation, the dsh web process must be restarted to load the plugin.
Configuration¶
Configuration entry: Settings → Plugins → Plugin Configuration → Aggregated Web Search.
In the configuration card, you can adjust the following:
- Providers (Priority Queue): Includes entries such as AnySearch, TinyFish, Tavily, Brave, Exa, Firecrawl, Jina, SerpApi, and Serper. Each entry can be enabled/disabled, or its default endpoint can be overridden. The order determines the order in which requests are attempted.
- Attempt Timeout Ms (Timeout Setting): The timeout deadline (in milliseconds) for a single attempt, ranging from 1 to 60000, with a default of 10000.
Notes¶
- AnySearch supports anonymous access and can be tried without configuring a key.
- Providers such as Tavily, TinyFish, Brave, Exa, Firecrawl, Jina, SerpApi, and Serper require the corresponding API keys to be configured.
- Uninstall command:
dsh plugin --profile web remove dsh-web-search-aggregation
By aggregating multiple upstream services, this plugin resolves interruption issues caused by a single provider being unavailable. It is well suited for DSH agent scenarios that require highly available web access.