Introduction

By default, the web_search tool in DeepSeek Harness (DSH) is connected to a DeepSeek-hosted provider through a pinned seam, which requires a DEEPSEEK_API_KEY. If the key is missing, the tool immediately reports an error and aborts execution.

The dsh-keyless-search plugin registers a keyless provider and redirects the seam, allowing the web_search tool to work without an API key, account, or configuration.

What Is This

This is a plugin that provides keyless web search capabilities for the DeepSeek Harness web_search tool. It is maintained by OzzyDeng-JunDeng and follows the MIT license.

Its core purpose is to bypass the default key dependency, enabling developers or agents to perform web searches without configuring a key.

Installation and Activation

Installation requires only one command. The plugin is registered on npm as dsh-keyless-search and declares dsh.bundle, so dsh plugin add automatically appends it to dsh.profile.bundles.

  1. Install the plugin:
dsh plugin --profile <your-profile> add dsh-keyless-search
  1. Verify activation:
    When starting a new session, the plugin automatically registers the provider and overrides the default web_search seam.

  2. Uninstall the plugin:

dsh plugin --profile <your-profile> remove dsh-keyless-search

Backend Selection and Configuration

The plugin supports multiple backends. Searches are performed in order, and the first backend that returns a non-empty result wins.

Backends enabled by default include:
* Tavily: accessed through its official Keyless mode.
* Firecrawl: accessed through its official Keyless tier.

Optional backends (disabled by default):
* Bing RSS: searches via the Bing results RSS feed.
* Bing HTML: searches via the markup of Bing result pages.

Because Bing’s robots.txt restricts crawlers from accessing the /search path, the Bing backend is disabled by default. To enable it, configuration changes are required.

It can be configured through a YAML file or environment variables.

YAML configuration example (located in the profile’s cordis.patch.yml):

- id: keyless-search
  name: dsh-keyless-search
  config:
    searchBackends: tavily,firecrawl
    timeoutMs: 15000
    debug: false
    bingHost: cn.bing.com
    bingMarket: zh-CN

Environment variable overrides:
* KEYLESS_SEARCH_BACKENDS
* KEYLESS_SEARCH_TIMEOUT_MS
* KEYLESS_SEARCH_DEBUG=1

Text Safety and Behavior

The plugin has the following runtime characteristics:

  • Zero dependencies: the module has no static imports and can be loaded in a profile with no dependency packages.
  • Text hardening: To prevent externally sourced web content from breaking the formatting of DSH consumers (for example, link injection or HTML injection), the plugin escapes and normalizes text returned by providers, replacing sensitive characters with escape sequences and wrapping the output in boundary markers.
  • Failure handling: If all backends fail, the plugin throws an error that includes the specific backend failure reasons, instead of silently returning empty results.
  • Rate limits: Keyless tiers have rate limits. Tavily’s Keyless tier allows 1,000 credits per month. If higher limits are needed, you can add TAVILY_API_KEY or FIRECRAWL_API_KEY later, and the plugin will automatically upgrade.

Use Cases and Notes

The plugin is mainly intended for scenarios where you need to quickly prototype or test web_search capabilities and do not want to configure an API key yet.

Notes:
1. Feature scope: The plugin only registers search providers and does not provide web_fetch functionality.
2. Node.js version: The runtime environment must meet Node.js >= 18.
3. Bing backend: Enabling the Bing backend is an intentional configuration choice because it requests private endpoints of the search engine.
4. Security: The plugin runs under the permissions of the current DSH process. It is recommended to review the source code before installation.

Summary

dsh-keyless-search addresses the strong API key dependency of the default search tool in DeepSeek Harness and provides out-of-the-box search capabilities through the Keyless modes of Tavily and Firecrawl. With YAML or environment variable configuration, you can flexibly switch backends and control behavior.