Introduction¶
The core design philosophy of DeepSeek Harness (DSH) is local-first. The capabilities required by coding agents—such as files, Shell, Git, and planning—are local and cost zero. Web search is the only “wall” that needs to be broken through: existing built-in DSH search or third-party providers typically require paid accounts, API keys, or consumption of model tokens. The dsh-web-search-ddg plugin solves this problem by scraping DuckDuckGo’s Lite results page, providing Harness with search capabilities that require no credentials and consume no model tokens.
Plugin Overview¶
dsh-web-search-ddg is a web tool plugin for DeepSeek Harness, maintained by tatselkrik and released under the MIT license.
It registers through Harness’s public ctx.web provider interface and injects DuckDuckGo search results directly into the agent’s workflow.
Core Features¶
- Zero credentials: No need to store any API keys or access credential vaults.
- Zero model tokens: The search process does not trigger helper model calls and consumes no tokens.
- Strict mode: Only accepts anchor links marked by DuckDuckGo results; when parsing fails, it throws an error instead of silently returning empty results.
- Redirect-aware parsing: Automatically resolves redirect wrappers such as
/l/?uddg=, discards internal links, and deduplicates URLs. - Entity-safe text: Properly handles HTML entity encoding (such as
&) and avoids double decoding. - GET and POST: Supports both GET (default) and POST query methods; POST can evade some anti-crawling checks.
- Correct snippet pairing: Ensures each search snippet is correctly associated with its corresponding anchor link.
Installation and Activation¶
It is recommended to install the plugin into a specific Profile.
- Install the plugin:
dsh plugin --profile my-profile add github:tatselkrik/dsh-web-search-ddg
- Configure the Provider. Add the following to
cordis.patch.ymlin the Profile directory:
- id: web
name: '@deepseek-ai/dsh-web'
config:
searchProvider: duckduckgo
- Start Harness and use the Web tool:
dsh --profile my-profile web
Configuration Options¶
The plugin provides the following configurable parameters, which can be overridden via cordis.patch.yml:
| Key | Default | Description |
|---|---|---|
baseURL |
https://lite.duckduckgo.com/lite/ |
DuckDuckGo Lite results page URL |
limit |
10 |
Maximum number of sources per search |
method |
get |
Request method (get or post) |
timeoutMs |
15000 |
Timeout for each request (milliseconds) |
Configuration example:
- id: web-search-ddg
name: dsh-web-search-ddg
config:
limit: 5
method: post
Notes and Limitations¶
- Unofficial endpoint: The plugin uses an unofficial scraping endpoint. High-frequency requests may trigger 403 errors or CAPTCHA challenges.
- No publication dates: DuckDuckGo Lite pages do not return publication date information.
- Index depth: Result quality matches DuckDuckGo’s index. For niche technical queries, index depth is slightly lower than Google’s.
- Privacy: The query terms for each request are visible to DuckDuckGo Inc.
- Security: No keys, no credential access, and no code execution at installation time. Dependencies are strictly scoped and do not use wildcards.
Use Cases¶
Suitable for developers or users who need free, local-first web search within DSH. Especially for scenarios where you want to avoid API key management, avoid consuming model tokens, or fully audit the search logic.
Conclusion¶
dsh-web-search-ddg keeps DeepSeek Harness within a pure “local-first, keyless” ecosystem. Using simple HTTP scraping and regex parsing, it fills the gap in web search capabilities for free software.