Introduction¶
The web profile of DeepSeek Harness (DSH) handles search through the ctx.web interface. By default, this interface is provided by the hosted backend. For users who already run their own search stack (such as SearXNG, an internal search gateway, or a vendor API) or who want queries to stay within their local network, the default behavior is not suitable.
Plugin Overview¶
The plugin is named dsh-web-search-custom, maintained by user runfali, and belongs to the “Web tools” category. It is a standard dsh bundle plugin, designed as a thin adapter: it does not own a search engine, index, or cache, and only interfaces with any JSON API.
Core Features¶
- Non-invasive and Zero-Dependency: As a standard bundle plugin, it can be removed to restore the native search provider without modifying DSH source code. It has no runtime dependencies and only uses packages bundled with DSH.
- General-purpose JSON API Support: Supports GET or POST requests, and allows custom headers such as Authorization.
- Visual Configuration: Supports configuring the URL, API key, timeout, and field mappings in the settings page.
- SearXNG Compatibility by Default: The built-in field mappings match the
results[]/url/title/content/publishedDatestructure of SearXNG.
Installation and Enablement¶
Install the plugin using the official command:
dsh plugin --profile web add dsh-web-search-custom
After installation, restart the DSH Web instance.
Configuration Methods¶
The search provider ID registered by the plugin is custom. After selecting this provider, configure it using one of the following three methods:
1. Settings Page¶
Open Settings → Plugins and expand the “Custom search (web-search-custom)” card. All parameters are editable, and changes take effect immediately after saving.
2. Profile Patch Layer¶
Override the configuration through the patch layer in the settings document:
- id: web-search-custom
config:
url: 'http://127.0.0.1:8080/search?format=json&q={query}'
apiKey: ''
method: GET
body: '{"query":"{query}"}'
headers: '{}'
authHeader: Authorization
authScheme: Bearer
timeoutMs: 30000
resultsPath: results
urlField: url
titleField: title
snippetField: content
publishedField: publishedDate
3. Environment Variables¶
Use environment variables to override configuration, which is suitable for handling sensitive information:
WEB_SEARCH_CUSTOM_URL: Overrides the search URLWEB_SEARCH_CUSTOM_API_KEY: Overrides the API key
Configuration Reference¶
The main configuration items are as follows:
url: Search endpoint, supporting{query}and{apiKey}placeholders.apiKey: Optional API key, sent by default asAuthorization: Bearer.method: Request method, supporting GET or POST, with GET as the default.body: POST request body template.headers: Additional request headers, in JSON format.timeoutMs: Request timeout, defaulting to 30000ms.resultsPath: Path to the results array (for example,data.results).urlField/titleField/snippetField/publishedField: Result field mappings.
Notes and Limitations¶
- Version Requirements: The DeepSeek Harness version must satisfy
>=0.1.2-alpha.3 <0.2.0 || >=0.1.5-alpha.1 <0.1.6; the Node.js version must satisfy^22.19.0 || >=24.0.0. - Network Access: Outbound network access from the host to the configured endpoint is required.
- Data Processing: The plugin deduplicates results by URL, filters out non-http(s) entries, removes HTML tags, and decodes entities.
Conclusion¶
This plugin enables DSH Web UI to integrate flexibly with private or third-party search APIs. Its thin-adapter design achieves non-invasiveness and quick configuration. For more details, refer to the plugin catalog page or source repository.