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

  1. 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.
  2. General-purpose JSON API Support: Supports GET or POST requests, and allows custom headers such as Authorization.
  3. Visual Configuration: Supports configuring the URL, API key, timeout, and field mappings in the settings page.
  4. SearXNG Compatibility by Default: The built-in field mappings match the results[] / url / title / content / publishedDate structure 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 URL
  • WEB_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 as Authorization: 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.