rogerdigital/dsh-searxng
A DeepSeek Harness (dsh) plugin that registers a SearXNG-backed search provider into the web capability seam (ctx.web), giving your agent websearch through a free, self-hosted, key-less metasearch instance — instead of the paid Exa/Perplexity APIs.
catalog 简介 / catalog descriptioncatalog description:—
项目介绍Project Overview
dsh-searxng 是 DeepSeek Harness 插件,在 web 能力接口中注册一个由 SearXNG 驱动的 web_search 提供方,使智能体通过自建、无需密钥的元搜索后端获取网页结果,从而替代 Exa、Perplexity 等付费 API。配置项包括 baseURL、language、engines、categories 与 authHeader,均可选。适用于希望以自有 SearXNG 实例承担检索、避免外部配额与费用的场景。注意:目标实例必须在 settings.yml 的 search.formats 中启用 json 格式,否则会返回 403;该插件目前仍处于开发者预览阶段。
dsh-searxng is a DeepSeek Harness plugin that registers a SearXNG-backed web_search provider on the web capability seam, letting an agent query the web through a self-hosted, key-less metasearch instance instead of paid APIs such as Exa or Perplexity. Configuration lives on the web-search-searxng row and covers baseURL, language, engines, categories, and authHeader, all optional. Use it when you want your own SearXNG to supply the agent's web results. Note: the target instance must enable json in search.formats, otherwise requests fail with HTTP 403, and the wider dsh runtime is still in developer preview.
请帮我了解并安装插件:【dsh-searxng】【https://github.com/rogerdigital/dsh-searxng】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin add dsh-searxng
把 rogerdigital/dsh-searxng 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-searxng
A DeepSeek Harness (dsh) plugin that registers a
SearXNG-backed search provider into the web capability seam
(ctx.web), giving your agent web_search through a free, self-hosted, key-less metasearch
instance — instead of the paid Exa/Perplexity APIs.
Install
dsh plugin add dsh-searxng
(With a named profile: dsh plugin --profile <name> add dsh-searxng.)
Quick start
Run a SearXNG instance with the JSON format enabled. If you installed only the plugin, clone the repository example first:
git clone --depth 1 https://github.com/rogerdigital/dsh-searxng.git dsh-searxng-example docker compose -f dsh-searxng-example/examples/docker/docker-compose.yml up -d curl 'http://127.0.0.1:8080/search?q=test&format=json'From an existing source checkout, you can instead run
docker compose up -dinexamples/docker. This repository example is loopback-only and pre-configuressearch.formatswithjson— the one setting most public instances deliberately disable.Point the plugin at it. Either set an environment variable before launching dsh:
export SEARXNG_BASE_URL=http://127.0.0.1:8080 dsh…or override the plugin row in your profile's
cordis.patch.yml($DSH_HOME/profiles/<name>/cordis.patch.yml):- id: web-search-searxng config: baseURL: http://127.0.0.1:8080 language: zh-CNAsk your agent something that needs the web. If this is the only search provider you have installed, the seam auto-selects it. If you also have Exa/Perplexity installed, select it explicitly with
export DSH_WEB_SEARCH_PROVIDER=searxng(or setsearchProvider: searxngin the web row's config).
Until baseURL is set, the provider registers as unavailable — no public instance is assumed,
because most disable the JSON format and rate-limit heavily.
Configuration
All keys are optional; all live on the web-search-searxng row's config.
| Key | Default | Meaning |
|---|---|---|
baseURL |
$SEARXNG_BASE_URL |
Base URL of the instance, e.g. http://127.0.0.1:8080. Must be http(s), contain no query or fragment, and have json in search.formats. |
language |
none | Locale passed as SearXNG's language parameter, e.g. zh-CN, en-US. |
engines |
none | Comma-separated engine allowlist, e.g. bing,duckduckgo. |
categories |
none | Comma-separated category filter, e.g. general,it. |
authHeader |
none | Authorization header value, for instances fronted by an API-key gate. Sent verbatim. |
The result count is not configurable here: dsh-tool-web owns the bound (searchMaxResults,
default 8) and the seam truncates to it.
Troubleshooting
- HTTP 403 — the instance does not enable the JSON format. Add
jsontosearch.formatsin itssettings.yml(see the repository example), then restart the instance. - HTTP 429 — the instance's rate limiter. For a local instance set
limiter: false, or raise its limits. - Provider unavailable / never selected —
baseURLis not set, is not an absolute http(s) URL, or contains a query or fragment. WEB_PROVIDER_AMBIGUOUS— more than one search provider is installed and available; select one viaDSH_WEB_SEARCH_PROVIDER=searxng.
Compatibility
dsh is in developer preview with breaking changes expected. This table tracks tested pairings:
| Plugin version | @deepseek-ai/dsh-web |
@deepseek-ai/dsh-launch-environment |
Notes |
|---|---|---|---|
| 0.1.1 | >=0.1.0-rc.6 <0.2.0 (tested against 0.1.0-rc.6) |
>=0.0.1-rc.3 <0.2.0 (tested against 0.0.1-rc.3) |
First-round hardening |
| 0.1.0 | >=0.1.0-rc.1 <0.2.0 |
>=0.0.1-rc.1 <0.2.0 |
Initial release |
Develop
pnpm install
pnpm test # vitest
pnpm build # tsdown → lib/
Integration check against a live instance:
cd examples/docker && docker compose up -d
node -e "import('./lib/index.mjs').then(m => new m.SearxngSearchProvider({ baseURL: 'http://127.0.0.1:8080' }).search({ query: 'deepseek harness' }).then(r => console.log(r.sources.slice(0, 3))))"
License
MIT
ruvnet/ruflo
amruthpillai/reactive-resume
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/colleague-skill
nocobase/nocobase
Tencent/WeKnora