← Back to home@n0pe-sled

web-search-searxng

dsh plugin: SEARXNG-backed web search provider for the dsh web_search tool (host-only, no Settings UI)

Stars
0
Language
JavaScript
Created
Sep 13, 2026
Updated
Sep 13, 2026
GitHub repo

Introduction

dsh-web-search-searxng

A host-only DeepSeek Harness plugin that registers a SEARXNG-backed search provider with the web capability seam (ctx.web). It sits beside the shipped web-search-deepseek, web-search-exa, and web-search-perplexity providers; the model-facing web_search tool stays owned by @deepseek-ai/dsh-tool-web.

How it fits

  • The seam (@deepseek-ai/dsh-web) owns provider selection via the web row's searchProvider config (or $DSH_WEB_SEARCH_PROVIDER, or auto-select when exactly one usable provider is registered).
  • This provider registers under the id searxng and calls your instance's JSON API: GET {baseURL}/search?q=<query>&format=json.
  • web_search errors route through the seam's WebError taxonomy: WEB_ABORTED on caller cancellation, WEB_PROVIDER_ERROR for request, timeout, HTTP, or unparseable-response failures.

Install

Add the bundle to the profile and point the seam at it. From the profile's patch layer (for example $DSH_HOME/cordis.patch.yml on the web profile):

- insert:
    - id: web-search-searxng
      name: dsh-web-search-searxng

# Point the seam's search at the SEARXNG provider (replaces the base row's config).
- id: web
  name: '@deepseek-ai/dsh-web'
  config:
    searchProvider: searxng

then restart the GUI. On the web surface the web_search tool itself is mounted per-session by the agent preset, so no tool enablement is needed.

Config (plugin row)

KeyDefaultMeaning
baseURLhttps://search.catrambone.orgInstance base URL; /search is appended.
enginesunsetComma-separated SEARXNG engine filter (engines=).
categoriesunsetSEARXNG category filter (categories=).
languageunsetSEARXNG language hint (language=).
timeoutMs15000Whole-request timeout in ms.
- id: web-search-searxng
  name: dsh-web-search-searxng
  config:
    baseURL: https://search.catrambone.org
    engines: google,duckduckgo

Mapping

Each results[] entry maps to a WebSearchSource: url (required, else the entry is dropped), title, snippet from content, and publishedAt from publishedDate when the instance returns one. Results are deduplicated by URL (one page can appear under several engines). SEARXNG returns no generated answer, so content is omitted; maxResults truncation is the seam's job.

Verify

node tests/smoke.mjs   # mapping, availability, apply registration, local round trip

The provider's search() has also been exercised directly against a live instance: deepseek harness returns ~28 mapped sources with titles and snippets.