Introduction

The web profile of DeepSeek Harness (DSH) provides a web search seam called ctx.web. DSH’s philosophy is “everything is a plugin”; in this plugin ecosystem, dsh-web-search-searxng is a standalone SearXNG-backed web search provider.

It solves a specific problem: if you already have a self-hosted SearXNG and want DSH’s web_search to call your own SearXNG instance instead of relying on an external API, you can install this plugin directly.

What is it

dsh-web-search-searxng is an installable DSH plugin package targeting the DeepSeek Harness web profile (ctx.web).

The repository address is https://github.com/d3cker/dsh-web-search-searxng. It is declared in package.json as:

  • name: dsh-web-search-searxng
  • version: 0.2.0
  • license: MIT
  • type: module

It is a DSH plugin package, not part of DSH core functionality.

Core Capabilities

The following capabilities are verified information from the README and package.json:

  • Provides a standalone SearXNG backend web search provider for ctx.web.
  • Pure ESM, no build steps.
  • Published as a bundle; can be installed and automatically activated with a single dsh plugin command.
  • After installation, it switches the web seam to the searxng provider and mounts the plugin row.
  • Supports configuring the SearXNG instance address via SEARXNG_BASE_URL, default http://localhost:8888.
  • Supports optional configuration SEARXNG_NUM_RESULTS and SEARXNG_API_KEY.
  • Exposes a web-search-searxng settings section; the Settings card requires changes on the harness side to be usable.
  • Uses vitest to run tests; README records 20 tests.

Installation & Activation

The installation command given in the README is:

dsh plugin --profile web add /path/to/dsh-web-search-searxng

/path/to/dsh-web-search-searxng is a placeholder path; replace it with your local plugin directory.

After execution, the plugin enters DSH’s web profile and activates automatically. The result described in the README is: the web seam switches to the searxng provider, and the plugin row is mounted.

Configuring the SearXNG Instance

The most common method is to set environment variables:

export SEARXNG_BASE_URL=http://192.168.30.74:8888

Then start or restart dsh web in that shell:

dsh web

The default value of SEARXNG_BASE_URL is http://localhost:8888.

If the SearXNG instance requires an API key, you can set:

export SEARXNG_API_KEY=your-key

SEARXNG_API_KEY is optional configuration, used only for instances that require a key.

SEARXNG_NUM_RESULTS is also an optional configuration item, used to configure the number of results.

If you don’t want to use environment variables, an alternative in the README is to edit cordis.patch.yml in the bundle and modify the default value of the baseURL line:

baseURL: !!js process.env.SEARXNG_BASE_URL ?? 'http://localhost:8888'

Change http://localhost:8888 to the actual instance address.

Verifying the Search

The verification method given in the README is to call:

web_search("postgresql vs mysql")

If configured correctly, it should return aggregated results from your SearXNG instance.

Settings Card (Optional)

The plugin exposes a web-search-searxng settings section. To edit these fields in DSH’s Settings → Plugins, changes on the harness side are required.

The changes listed in the README include:

  1. Expose the web-search-searxng namespace. The location given in the README is packages/host/apiproxy/src/api-proxy.ts; add this namespace to WEB_SETTINGS_NAMESPACES:
const WEB_SETTINGS_NAMESPACES = [
  'agent-loop', 'shell', 'locale', 'permission', 'ui-conversation', 'ui-theme',
  'web-search-deepseek', 'web-search-searxng',
] as const
  1. Render the card in packages/client/ui-settings-plugins. The README mentions adding SearxngCard / SearxngCardController, registering them in the settings.plugin.item slot of index.ts, and adding searxng* locale keys.

Afterwards, you need to rebuild the web artifacts and restart the GUI. The commands given in the README:

pnpm run build:lib:host
pnpm run build:lib:client
pnpm run build:web

Without these changes, search is still usable; configuration can only be done via environment variables or cordis.patch.yml.

Applicability & Notes

Suitable for:

  • Already have a self-hosted SearXNG and want DSH’s web_search to use your instance.
  • Want a pure ESM plugin package with no build steps.
  • Prefer configuration via environment variables or cordis.patch.yml.

Note:

  • The plugin runs with the permissions of the current dsh process. You should check the source code, package.json, dependencies, and license before installing.
  • package.json declares the license as MIT and the version as 0.2.0.
  • SEARXNG_API_KEY is optional configuration; only applies to SearXNG instances that require a key.
  • The Settings card is not provided solely by the plugin; it requires harness-side changes, rebuilding, and restarting the GUI.

Links

GitHub: https://github.com/d3cker/dsh-web-search-searxng