d3cker/dsh-web-search-searxng
一个独立的、由SearXNG驱动的网页搜索提供程序,用于DeepSeek Harness网页配置文件。它接入harness的网页搜索接口(ctx.web),使代理的web_search工具通过您自托管的SearXNG实例进行搜索,而非使用供应商API。
项目介绍Project Overview
DSH SearXNG 搜索插件,为 DeepSeek Harness 的 web 配置文件提供基于自建 SearXNG 实例的网页搜索能力,替换默认供应商 API。核心特性:纯 ESM 无需构建,通过 dsh plugin add 一条命令自动安装、激活并加入 bundle 栈与 patch 层;只需 SEARXNG_BASE_URL 一个环境变量即可配置地址、结果数与 API Key。使用时机:希望用自有 SearXNG 实例替代官方搜索、注重隐私与自托管的部署场景。需注意:Settings → Plugins 界面卡片需在 harness 源码的 api-proxy.ts 允许列表与 ui-settings-plugins 中注册 SearxngCard 后才会显示,否则仅可通过环境变量或 cordis.patch.yml 修改配置。
DSH SearXNG is a standalone web search provider plugin for the DeepSeek Harness web profile, routing the agent's web_search tool to a self-hosted SearXNG instance instead of a vendor API. It ships as an ESM bundle with no build step: a single dsh plugin add command installs and activates it, appending its cordis.patch.yml layer to the profile. Configuration is one env var, SEARXNG_BASE_URL, with optional SEARXNG_NUM_RESULTS and SEARXNG_API_KEY; tests are included. Use it when you want privacy-preserving, self-hosted search inside the harness. Caveat: the editable Settings → Plugins card requires two small harness-side changes (allowlist entry and a SearxngCard registration) and a rebuild, otherwise configuration stays env- or YAML-only.
请帮我了解并安装插件:【dsh-web-search-searxng】【https://github.com/d3cker/dsh-web-search-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 --profile web add github:d3cker/dsh-web-search-searxng
把 d3cker/dsh-web-search-searxng 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-web-search-searxng
A standalone SearXNG-backed web search provider for the DeepSeek Harness web profile. It plugs into the harness's web-search seam (ctx.web), so the agent's web_search tool searches through your own self-hosted SearXNG instance instead of a vendor API.
- Plain ESM, no build step.
- Ships as a bundle: one
dsh plugincommand installs and activates it automatically. - Single configuration knob:
$SEARXNG_BASE_URL. - Tested (
pnpm test, 20 tests, vitest).
The one-command install
From a fresh DeepSeek Harness checkout (or with dsh on PATH):
dsh plugin --profile web add /path/to/dsh-web-search-searxng
That's it. The plugin is automatically appended to the web profile's bundle stack and its patch layer (shipped in this repo as cordis.patch.yml):
- switches the web seam to this provider (
searchProvider: searxng), and - mounts the plugin row.
No cordis.patch.yml hand-editing. No rebuild.
Configure: set one environment variable
Your SearXNG address is read from SEARXNG_BASE_URL (defaults to http://localhost:8888):
export SEARXNG_BASE_URL=http://192.168.30.74:8888 # your instance
Optional knobs:
| Variable | Default | Meaning |
|---|---|---|
SEARXNG_BASE_URL |
http://localhost:8888 |
Your SearXNG instance; /search is appended. |
SEARXNG_NUM_RESULTS |
10 |
Default result count when a request doesn't specify its own bound. |
SEARXNG_API_KEY |
(none) | Optional, for instances behind a key. |
Then start (or restart) dsh web in that shell — or add the exports to your shell profile / the .env the harness loads.
No environment variables? Then edit the one line in the bundle's cordis.patch.yml:
baseURL: !!js process.env.SEARXNG_BASE_URL ?? 'http://localhost:8888'
# ^^^^^^^^^^^^^^^^^ change this default
Both ways produce the same result — the choice is yours.
Verify
web_search("postgresql vs mysql")
should return aggregated results from your instance.
Wait — will I get the Settings → Plugins card?
Only after applying two small harness-side changes (the card lives in the harness source itself, and an allowlist gate in api-proxy.ts must name this namespace). They're documented at the end of this README in Make the Settings card work. The search itself works without them.
Details
Files
dsh-web-search-searxng/
├── cordis.patch.yml # bundle layer: activation + config (env-first)
├── src/
│ ├── index.js # plugin entry: registers provider + settings section
│ └── provider.js # SearXNG JSON API client (GET /search?format=json)
├── tests/provider.spec.js
├── package.json # declares dsh.bundle → auto layer on `dsh plugin add`
├── README.md
└── LICENSE
How the one command works
dsh plugin --profile web add runs pnpm add inside the profile directory, then reconciles the bundle list: any installed package declaring dsh.bundle in its package.json is appended to dsh.profile.bundles (harness apps/cli/src/plugin.ts, reconcilePlugins). This repo's package.json declares exactly that, pointing at cordis.patch.yml, which is applied as the top layer over the base/web-app bundles.
Options at a glance
| Setting | Default | Via |
|---|---|---|
baseURL |
http://localhost:8888 |
$SEARXNG_BASE_URL env, or the patch line |
numResults |
10 |
$SEARXNG_NUM_RESULTS env, or the patch line |
apiKey |
(none) | $SEARXNG_API_KEY env, or the patch line |
The plugin also exposes a web-search-searxng settings section, so once the Settings card is enabled (below) those same fields become editable in the GUI and writes apply to the next search immediately.
Running tests locally
mkdir -p node_modules/@deepseek-ai # dev-only: link peers from a harness profile
for p in cordis dsh-invariants dsh-launch-environment dsh-settings dsh-web schemastery; do
ln -sf "$DSH_HOME/profiles/node_modules/@deepseek-ai/$p" "node_modules/@deepseek-ai/$p"
done
pnpm test
node_modules/ is git-ignored.
Make the Settings card work (optional)
The editable card needs two changes inside the harness (they can't ship from a host-only plugin, because the browser bundle of ui-settings-plugins and the settings exposure gate are part of the harness). Both are small:
- Expose the namespace — in the harness, edit
packages/host/apiproxy/src/api-proxy.ts:
const WEB_SETTINGS_NAMESPACES = [
'agent-loop', 'shell', 'locale', 'permission', 'ui-conversation', 'ui-theme',
'web-search-deepseek', 'web-search-searxng', // ← add this
] as const
- Render the card — in
packages/client/ui-settings-plugins, addSearxngCard/SearxngCardController(endpoint + default result count), register it inindex.ts(settings.plugin.itemslot), add thesearxng*locale keys, then rebuild the web artifacts (pnpm run build:lib:host+pnpm run build:lib:client+build:web) and restart the GUI.
Without these two, everything works except the in-UI editor: search is live, config via env var or the patch file. With them, you also get Settings → Plugins → Web search (SearXNG).
Created with the DeepSeek Harness and DeepSeek V4 Flash 0731 running on 2 × Asus Ascent GX10.
nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
esengine/DeepSeek-Reasonix
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/distilly
titanwings/colleague-skill