When building agents in DeepSeek Harness (DSH), web access is essential. Although the official tool-web is provided, developers may need more controllable search and fetch logic in certain scenarios, or may need to replace the default implementation. The DSH Web Search plugin addresses this issue. It runs persistently on the host side, supports Bing and SearXNG search, and can fetch specific HTTP(S) pages.

Plugin Positioning

DSH Web Search is a host-side DSH tool plugin maintained by gao-gao-zai. It provides two interfaces, web_search and web_fetch, for performing web search and web page fetching. The tool converts HTML to Markdown and does not download or interpret images. Output size is limited, making it suitable for direct use in production environments.

Prerequisites

The following conditions must be met before use:
1. DeepSeek Harness is installed and the web profile is enabled.
2. Node.js 22 or a newer version is installed on the system.
3. The DSH configuration directory has write permission.

Installation and Enablement

Install it into the web profile using the command line:

dsh plugin --profile web add github:gao-gao-zai/dsh-tool-web-search

For development and debugging, use a local checked-out path:

dsh plugin --profile web add link:E:\DeepSeekHarness\WebSearch

Configuration Notes

After installation, the official tool-web tool must be disabled; otherwise, a tool with the same name may conflict or cause startup errors. This requires configuration at two levels:

  1. Host Profile layer configuration: Edit C:\Users\<user>\.dsh\profiles\web\cordis.patch.yml, and add or modify the following:
    - id: tool-web
      disabled: true
  1. Agent Preset layer configuration: Copy the standard preset from the DSH installation directory to the user directory ${DSH_HOME:-$HOME/.dsh}/.agent-presets/web-search/, and disable:
    - id: tool-web
      name: '@deepseek-ai/dsh-tool-web'
      disabled: true
At the same time, point the default preset to this directory in `settings.yaml`:
    agent-presets:
      default: web-search

Restart the DSH backend (for example, stop the old process with Ctrl+C, then run dsh web) and create a new session. To verify that the new tool is working, try:

web_fetch({"url":"https://example.com/"})

If it returns Fetched https://example.com/ (HTTP 200) along with Markdown content, the configuration is successful.

The plugin registers the dsh-web-search namespace. In the browser, open Settings → Web UI Plugins → Web Search and Fetch (or Plugins → Plugin configuration) to configure the engine (Bing/SearXNG), maximum number of results, timeout period, and output character limit. SearXNG credentials must be managed in the DSH credentials UI.

Typical Usage

After enablement, the agent can invoke the following tools:

  • Search: Supports the query, limit, and language parameters.
    web_search({"query": "DSH", "limit": 5, "language": "zh-CN"})
  • Fetch: Accepts an HTTP(S) url parameter.
    web_fetch({"url": "https://example.com/"})

Limitations and Precautions

The plugin enforces output size limits to prevent memory overflow:
* Search: Maximum 10 results, 200 characters per snippet, and a rendered output limit of 16K characters.
* Fetch: Rendered output limit of 200K characters.
* Any network response that exceeds the limits is rejected before parsing.

Note: This plugin depends on Node.js 22+ and both search and fetch run with the permissions of the DSH process. It is recommended to review the source code and license (MIT) before installation.

Summary

By following the steps above, developers can obtain a controllable, persistent, and bounded web toolchain in DSH. For more details, refer to the project page or the source repository.