DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Web Search Brave — DSH Plugin for DeepSeek Harness
← Plugins
W

@deepseek-ai/dsh-web-search-brave

Web Search Brave

Brave Search provider plugin for DeepSeek Harness (dsh) — hardened fork that fixes web_search hangs, missing request timeouts, and HTTP 429 rate-limit storms

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:nedzen/dsh-web-search-brave#d12158dd91093b96517c31bea8b4f8e146c9c574
READMECompatibilityVersions

Compatibility and provenance

Web Search Brave is published as @deepseek-ai/dsh-web-search-brave and currently resolves to version 0.1.3. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
github
Registry updated
10/4/2026

Versions

0.1.3
stable
10/4/2026

Related plugins

Loading related plugins…

Latest
0.1.3
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
any
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
10/4/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in search-research.

Ab Wechat Scrapedsh-ab-wechat-scrape--- description: "The out-of-tree wechat_scrape tool: retrieves WeChat official-account articles, filters promotional blocks, and saves each as a Markdown file, for maintainers of this machine's dsh profiles." kind: "package-reference" ---Ab Market Researchdsh-ab-market-researchAn out-of-tree DeepSeek Harness plugin: the trade_search tool (multi-round aspect-broadening query planning, publisher-tier ranking, source diversity, JSON snapshot) and its browser card in one package.Weknora@wxg-prc-cpg/dsh-weknoraWeKnora knowledge retrieval tools for DeepSeek Harness (dsh): semantic search, document reading and RAG/agent answers over your own knowledge bases.Free Searchdsh-free-searchFree web search for DeepSeek Harness: 24 engines (Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl/Parallel keyless; Zhihu global/site via MCP and Perplexity/SerpBase/DeepSeek/You.com/Baidu/Kimi/Aliyun/Doubao with key; OpenAI/Gemini/Claude

README

dsh-web-search-brave

Brave Search provider plugin for DeepSeek Harness (dsh) — a hardened fork that stops web_search from hanging your session, and stops multi-query searches from drowning in HTTP 429 rate limits.

The upstream package @deepseek-ai/dsh-web-search-brave gives DeepSeek Harness a Brave Search backend for its ctx.web capability seam. This fork keeps that drop-in package name and API, and fixes two reliability problems that can hang or disable web_search inside a real agent session.

Not affiliated with or endorsed by DeepSeek or the upstream author. This is an independent fork published under the original MIT license. Upstream is cnChenKai/dsh-web-search-brave, published on npm as @deepseek-ai/dsh-web-search-brave. Do not publish this fork to npm under the @deepseek-ai scope — that scope belongs to the upstream project.

  • Keywords: DeepSeek Harness, dsh, dsh plugin, Brave Search API, web search provider, web_search tool, HTTP 429 rate limit, request timeout, agent tool call hang

The bug this fixes

If your dsh session ever froze when the web_search tool was called — spinner forever, nothing in the transcript, sometimes needing a full restart — this is why.

BraveSearchProvider.search() in 0.1.1 armed no timer of its own and handed fetch only the caller's AbortSignal. DeepSeek Harness enforces tool timeouts through @deepseek-ai/dsh-tool-call-timeout-policy, which is explicitly cooperative: it awaits the tool promise without racing it. So when a request never settles, no tool result is ever recorded, the turn waits indefinitely, and the UI looks frozen.

Observed live, with a 60 s tool budget configured and never applied:

CallResult
web_search, 1 queryreturned in 1.1 s
web_search, 4 queriesnever returned — 8 m 29.7 s, until the user interrupted it

The second problem compounds it. One multi-query web_search call fans out as N parallel requests (the fan-out lives in dsh-tool-web), while Brave rate-limits per second. On the free tier that spends the whole budget on 429s:

4 concurrent queries, unspacedOutcome
upstream 0.1.10 of 4 succeeded (WEB_PROVIDER_ERROR, HTTP 429), in 731 ms

What this fork changes

Three configurable knobs, all bounded by the same hard deadline so nothing can hang:

SettingDefaultWhat it does
searchTimeoutMs15000Hard provider-level deadline. Fuses your AbortSignal with AbortSignal.timeout(). This is the freeze fix. Created before queueing, so queue wait counts against the budget.
minRequestIntervalMs1500Serializes the fan-out through a per-process queue, one request at a time, spaced. 1100 measured 3/4 successes; 1500 measured 4/4.
maxRetries2Bounded retries on HTTP 429, honouring Retry-After (capped at 3 s). Bounded by searchTimeoutMs, so retrying cannot reintroduce a hang.

Deadline expiry is reported as a clear WEB_PROVIDER_ERROR timeout; caller cancellation is still reported as WEB_ABORTED. Nothing else about the provider contract changed.

After the fix, on the same live API:

beforeafter
stalled server, no caller signalnever settlesrejects in 4.0 s
4 concurrent queries0/44/4 in 5.5 s
1 query903 ms843 ms

Install

dsh plugin --profile web add github:nedzen/dsh-web-search-brave

Or from a local checkout, which is how this fork is developed:

dsh plugin --profile web add file:$HOME/Sites/dsh-web-search-brave

Then pin the seam to it in your profile's cordis.patch.yml. A patch replaces the whole config, so restate every key the web row owns — omitting fetchProvider silently drops it and breaks web_fetch:

- id: web
  config:
    searchProvider: brave-search
    fetchProvider: http          # do not omit

- id: web-search-brave
  name: "@deepseek-ai/dsh-web-search-brave"
  config:
    apiKeyEnv: BRAVE_SEARCH_API_KEY
    baseURL: https://api.search.brave.com/res/v1
    maxResults: 10
    searchType: web
    # searchTimeoutMs: 15000      # optional overrides
    # minRequestIntervalMs: 1500
    # maxRetries: 2

The API key resolves from the credentials service first, then the launching environment (.env files are layered in automatically). Store it as BRAVE_SEARCH_API_KEY, or point apiKeyEnv at whatever name you export.

Verify it works

test/freeze-regression.mjs reproduces the freeze with a server that accepts the TCP connection and then never responds. Cases A (stalled server, no caller signal) and C (fan-out spacing) go RED on 0.1.1 and GREEN here.

cd ~/.dsh/profiles/web
set -a; . ~/.dsh/.env; set +a
node ~/Sites/dsh-web-search-brave/test/freeze-regression.mjs \
  ./node_modules/@deepseek-ai/dsh-web-search-brave/lib/index.js "0.1.3"

Node rather than Bun is deliberate: dsh runs this provider under Node's fetch, and the abort/timeout semantics being asserted are undici's.

Self-check in a live session — the timing tells you which build is loaded:

4-query web_searchBuild
returns in under 1 s, usually HTTP 429old 0.1.1
takes 4.5 s or more, normally succeedsthis fork

Tuning

  • Many parallel queries time out. searchTimeoutMs also covers queue wait. If the model fires several web_search calls at once (e.g. maxParallelToolCalls above ~3 with 4 queries each), the tail can exceed 15 s and fail fast rather than hang. Raise searchTimeoutMs to 30000.
  • Paid Brave plan. Set minRequestIntervalMs: 0 and maxRetries: 0 to trade robustness for speed.
  • Still rate-limited. Raise minRequestIntervalMs, or run a multi-provider fallback chain instead of a single backend.

Troubleshooting

I edited the source and nothing changed. A file: dependency is copied into the profile by pnpm, and pnpm install reports "Already up to date" while keeping the stale copy. Remove it and reinstall:

rm -rf ~/.dsh/profiles/web/node_modules/@deepseek-ai/dsh-web-search-brave
dsh plugin --profile web install

I reinstalled but the running session is unchanged. Only config hot-reloads. Plugin JavaScript is ESM-cached and dsh-hmr ships with no watch roots (root: []), so restart dsh to load new provider code.

WEB_DUPLICATE_PROVIDER. Another provider already registered the brave-search id — check for two rows declaring this bundle.

Compatibility

This fork exists for the 0.1.x line. It targets @deepseek-ai/dsh-*@^0.1.1-rc.2 peers.

Upstream 0.2.4 (cnChenKai/dsh-web-search-brave) already added an equivalent searchTimeoutMs, so if you are on dsh 0.2.x, use upstream — it is the maintained package and there is nothing better about this fork on that line. This fork is for sessions pinned to 0.1.x that cannot move the whole harness yet.

Related

  • cnChenKai/dsh-web-search-brave — upstream package (0.2.4, maintained)
  • deepseek-ai/deepseek-harness — the harness itself
  • 0xsline/awesome-deepseek-harness — ecosystem index
  • GitHub topic dsh-plugin — more dsh plugins
  • Other web_search backends: multi-provider, Exa, SearXNG

License

MIT, inherited from upstream. Original work © 2026 KaiChan; fork modifications © 2026 nedzen. See LICENSE.