Preface

DeepSeek Harness (DSH) adopts a plugin-based architecture, allowing local models to be extended with web access capabilities. When building local-first agents, developers often face two pain points: first, external search APIs are expensive or unreliable; second, built-in Web features may not meet specific scenario requirements or conflict with custom configurations.

dsh-web-automation is designed to address these issues. It integrates multi-engine keyless search, cached fetching, and platform-specific search into a standalone plugin.

Plugin Overview

This is a DeepSeek Harness (DSH) plugin that provides a local-first Web stack for local models.

Maintainer: stelmakhdigital
License: MIT

It includes four core capabilities, all enabled by a single installation command:

  • Multi-engine search: Provides the web_search tool, supporting DuckDuckGo and Bing (keyless), with optional Exa / DeepSeek / Jina (API Key required). Supports fallback or fusion routing, cooldown mechanisms, and BM25 optimization.
  • Cached fetching: Provides the web_fetch tool, SQLite cache-based, with support for ETag/Last-Modified validation. Repeated requests within the TTL do not make network requests.
  • Web platform search: Provides the web_platform_search tool for direct searches on GitHub, Reddit, YouTube, Bilibili, V2EX, RSS, and more. Supports adding new platforms through configuration without code changes.
  • History & statistics: Provides the web_history, web_search_stats, and web_cache_clear tools, reading local shared storage without internet access.

All state is stored locally; no cloud services are required.

Core Capabilities

  1. Multi-engine search
    Supports routing to DuckDuckGo/Bing (keyless) and Exa/DeepSeek/Jina (optional). Supports fallback or fuse (parallel + RRF fusion) modes, plus region settings and BM25 enrichment.

  2. SQLite cache
    Backed by a SQLite page cache, using ETag and Last-Modified for conditional validation. If a page is repeatedly fetched within the TTL, no network request is made.

  3. Web platform search
    Searches specific platforms through the web_platform_search tool. The platform list includes GitHub, Reddit, YouTube, Bilibili, V2EX, RSS, and more. New platforms can be added by configuration or hot-loading rule packs.

  4. History and cache tools
    web_history views search history, web_search_stats views statistics, and web_cache_clear clears the cache. All data comes from the local database.

Installation & Activation

Prerequisites:
* Node.js 22.19+ or 24+ (DSH’s own requirement).
* DeepSeek Harness is installed (run it via npx @deepseek-ai/dsh or a source build).

  1. Install the plugin
    Use the official command to install the plugin into a specified Profile (for example, the web profile):
    dsh plugin --profile web add git+https://github.com/stelmakhdigital/dsh-web-automation.git
This command automatically applies the `local-web.cordis.yml` overlay, pins the `web` seam, and registers the related tools.
  1. Start and verify
    After installation, start the Profile:
    dsh web              # Start the Web UI at http://127.0.0.1:3080
    dsh --profile tui    # Start the TUI (ensure the Profile name is tui)
Run the smoke test in a DSH session:
    web_search "hello world"

Configuration & Notes

Configuration methods
The plugin enables all features by default with no extra configuration required. If adjustments are needed, add configuration sections in DSH’s cordis.yml or apply overlays via dsh --patch ....

Key configuration items include:
* search: Configure the engine list (engines), mode (mode: fallback or fuse), region (region), and API Keys for Exa/DeepSeek/Jina.
* fetch: Configure the cache validation strategy (revalidate).
* platforms: Register the web_platform_search tool, set the maximum number of results, or add custom platforms via id and searchUrl.
* history: Control enabling/disabling history, cache clearing, and statistics features.

Notes
1. Local storage: Plugin state is stored in $DSH_HOME/web.db; all data is local.
2. Mutual exclusivity: This plugin is mutually exclusive with DSH’s built-in Web packages (such as web-search-multi) and cannot be loaded simultaneously; otherwise startup will report WEB_DUPLICATE_PROVIDER.
3. Browser automation (optional): If web automation (such as browser_open) is needed, separately install the dsh-web-browser subpackage and run playwright install chromium.
4. License: The plugin follows the MIT License.

Conclusion

dsh-web-automation decouples the functionality required for a local Web stack into a plugin, making keyless, zero-cost search and localized caching in DSH simple. It is suitable for developers who want to run agents in local environments and avoid dependencies on external APIs.