Preface¶
When integrating internet connectivity into DSH, a common problem arises: built-in or existing solutions often require API key configuration upfront or rely on a single backend. Once the backend hits rate limits, tasks stop. fno2010/dsh-web-search-ext solves this problem: it is a multi-backend web_search and web_fetch provider for DeepSeek Harness (DSH), usable without any API keys, or with keys added to unlock higher limits.
Below is an introduction to its positioning, capabilities, installation methods, and points to note during use.
What is this¶
fno2010/dsh-web-search-ext is a web connectivity extension plugin for DSH, maintained by fno2010, with an MIT license.
It provides two backends: Exa and Firecrawl, for web_search and web_fetch. Its core selling points are:
- Works without an API key;
- Optional API key configuration to increase limits;
- Automatic failover to another backend on backend failure;
- Performs liveness checks on results and displays source, duration, count, and limit details in the results.
This plugin requires Node.js version >=22. It is plain ESM JavaScript, has no build step, and no postinstall / prepare install scripts.
Core Capabilities¶
Dual Backend and Keyless Path¶
This plugin uses both Exa and Firecrawl backends simultaneously.
For web_fetch, it provides a keyless path: first scrape the URL via Firecrawl scrape, falling back to Exa’s anonymous MCP web_fetch_exa on failure.
The key is optional. The configuration priority is:
settingsliteral- credentials service
- launch environment variable
There are two usage differences to note:
- The keyless Exa MCP is the documented fallback but has limits and may return
HTTP 429; - Firecrawl keyless mode is an unofficial mode and may be rate-limited or removed.
Automatic Failover and 429 Cooldown¶
When a backend encounters the following, the plugin automatically switches to the next backend:
429401/402/4035xx- network error
- malformed body
For 429, the plugin performs cooldowns per backend. Cooldown time references the Retry-After or retry_after_seconds returned by the backend and is limited by maxCooldownSec.
Result Verification and Provenance¶
L0 liveness checks are enabled by default. Each returned result is marked with one of the following statuses:
alive
dead
blocked
timeout
unreachable
skipped
The plugin also provides experimental L1 content verification, which can be enabled via a configuration option:
"verifyLevel": "content"
Search results also include a provenance receipt, showing the actual responding backend, duration, result count, and limit details for the current path.
The plugin supports freshness windows:
24h
7d
30d
It is only sent when supported by the frontend or backend.
Installation and Enablement¶
First, install the plugin:
dsh plugin --profile web add @fno2010/dsh-web-search-ext
If you are using a local checkout, you can install it like this:
dsh plugin --profile web add ./path/to/dsh-web-search-ext
After installing the plugin, you need to restart the running dsh web process. After restarting, modifying configuration is hot-reloadable without needing to restart again.
After installation, the plugin’s bundle selection sets:
web.searchProvider: web-search-ext
web.fetchProvider: web-search-ext
That is to say, both web_search and web_fetch will point to the web-search-ext provider.
Typical Usage¶
After the installation and restart described above, you can use the configuration entry provided by the plugin in the Web interface.
Use Web Settings Card¶
In the Web plugin configuration card, you can configure six core configuration fields and two API keys.
Note that the freshness window is still only configured in settings.yaml, not in this card.
View Session Health¶
The Session Health tab uses this interface:
GET /web-search-ext/health
The health payload only contains counters, not credentials, URLs, or query text.
Run Connectivity Probe¶
The connectivity probe uses this interface:
POST /web-search-ext/probe
The probe payload only contains plan literals and closed codes, not vendor messages, URLs, or keys.
Use Slash Command¶
The plugin provides the /search-engine slash command for switching the preferred backend, viewing live status, and running connectivity tests.
If /search-engine is already taken, the plugin falls back to:
/web-search-engine
Applicable Scenarios and Notes¶
This plugin is suitable for the following scenarios:
- You want to add multi-backend capabilities for
web_searchandweb_fetchin DSH; - You want to get the pipeline working without configuring an API key first;
- You want automatic switching to another backend when one is rate-limited or fails;
- You want to see the actual backend, duration, result count, and limit details in the results;
- You want to manage this provider via settings card, health tab, and slash command in the Web interface.
Note the following points before use:
- The plugin runs under the current
dshprocess permissions; check the source code and license before installing; - The keyless path may have limits;
- Firecrawl keyless mode is an unofficial mode and may be rate-limited or removed;
- If the current web seam is not pinned to this provider, the plugin will gracefully degrade and will not claim results from other providers.
Getting Information¶
Community directory page:
https://www.skillhub.cn/plugins/fno2010/dsh-web-search-ext
GitHub repository:
https://github.com/fno2010/dsh-web-search-ext