Configurable web search for DeepSeek Harness using SearXNG, Wikipedia, Tavily, Brave, or Gemini, with per-client engine selection and bounded retries.
Install
# from npm (prebuilt)
dsh plugin --profile web add @lemoncat7/dsh-web-search
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:lemoncat7/dsh-web-search
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
当前版本 0.3.3,已验证宿主 DSH 0.2.0-rc.2(宿主仍为 RC)。Node.js ^22.19.0 或 >=24.0.0。详见 兼容说明 和 发布说明。
Configurable web access for DeepSeek Harness. The plugin provides DSH's native web_search and web_fetch tools: administrators select the search backend, while direct public-page retrieval uses the same plugin-scoped proxy and security boundary. A constrained web_source tool is also available when an agent must verify raw HTML markers or script-embedded data under an explicit source procedure; normal page reading remains the job of web_fetch.
Compatibility
Stable plugin release 0.3.3 targets DeepSeek Harness 0.2.0-rc.2 on Node.js ^22.19.0 or >=24.0.0. The Desktop origin fix is covered by automated HTTP tests, not a real Desktop client run. The host is still a release candidate. Older hosts should retain 0.2.1; this release does not claim compatibility with untested future hosts.
Supported providers:
- SearXNG — self-hosted, keyless general web search
- Wikipedia — keyless encyclopedia search; Simplified Chinese by default
- Tavily — agent-oriented API search
- Brave Search — traditional web and news search
- Gemini Grounded Search — Google Search grounding and URL Context for queries containing a URL
Only the selected provider receives each query. The plugin does not silently fan out requests or spend quota on fallback services.
Install
dsh plugin --profile web add @lemoncat7/dsh-web-search
Open Settings → Plugins → Plugin configuration → Web search to choose a provider, store API credentials, test the draft configuration, and save it without restarting DSH.
The default backend is keyless Chinese Wikipedia so a new installation can be verified immediately. Use SearXNG, Tavily, Brave, or Gemini for general web coverage.
Local SearXNG
docker compose -f deploy/searxng/compose.yml up -d
curl -fsS -X POST http://127.0.0.1:8080/search -d 'q=DeepSeek&format=json'
The included deployment binds to loopback only. Do not expose it publicly without authentication, rate limiting, and the controls recommended by SearXNG.
The settings card can read general-purpose engines from the configured instance, probe them with bounded concurrency, sort successful engines by latency, and save a per-client engine selection. Failed or empty searches can be retried from zero to three times.
Security
- Search JSON and fetched text are capped at 2 MiB; search responses are schema-validated.
web_fetchaccepts credential-free public HTTP(S) URLs only and blocks loopback, private, link-local, and reserved destinations.- Fetch redirects are capped at five and every hop is revalidated. Binary bodies are rejected.
web_sourceapplies the same fetch policy and supports only bounded range reads or a bounded set of exact source markers, with at most 120,000 returned characters.- API keys are resolved through DSH Credential Store and sent only in provider-defined authorization headers.
- Browser settings routes enforce exact same-origin writes, cap request bodies, and never return secret values.
- Fetch and source inspection are constrained read-only public-web capabilities, not internal-network access or arbitrary command execution.
Proxy
Set DSH_WEB_SEARCH_PROXY to an absolute HTTP(S) proxy URL. Search and fetch share this dispatcher; it remains scoped to the plugin and does not change networking for model providers or other DSH plugins. Loopback and private IPv4 destinations bypass it for local search backends, while web_fetch independently rejects non-public destinations. Add custom direct hosts to the comma-separated DSH_WEB_SEARCH_NO_PROXY variable.
Development
npm install
npm run check
Attribution
Maintained as an MIT-licensed derivative of zmh2000829/dsh-web-search-multi. The original license notice is retained.
Links
More in this category
Tencent/BrowserSkill#dsh-plugin-browserskill★ 8736
BrowserSkill bridge for controlling visible Chrome and Edge Agent Windows from DeepSeek Harness, with native browser tools, accessibility and VOM observations, screenshots, owned multi-session control, and a live Web UI overlay.
omdsh-dev/dsh-browser#packages/browser/bridge-browser★ 809
Chrome sidebar extension that lets DSH operate your browser directly, no vision capabilities required.
liustack/modsearch★ 659
Web search bridge for text-only agents: ask the web or X, get structured JSON evidence (search, fetch, citations).
DDDMUC/dsh-free-search★ 378
Free, keyless web search for DSH: 7 engines (DuckDuckGo/Bing/SearXNG free + Exa/Perplexity/DeepSeek paid), auto-failover, settings-page UI with API key inputs and official links, web_fetch, and an engine test tool.
wqty123/dsh-browser★ 109
Shared real browser for DSH: a native Electron window the human can watch and take over, driven by the agent over CDP with 20 browser_* tools (open/snapshot/execute/fill/screenshot/download/auth), per-task session isolation, cookie persistence, CAPTCHA detection; self-hosts on plain dsh web without a desktop shell.
Tabbit-Browser/dsh-tabbit★ 107
Gives DeepSeek Harness control of the Tabbit Browser: auto-loads the tabbit-browser skill on install, detects official Tabbit and Tabbit Browser releases (>= 1.9.0), checks the tabbit-cli persistent runtime, diagnoses the per-platform DSH sandbox mode needed to call the CLI, and downloads the region-matched official installer via a background job when no qualifying version is present.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.