DeepSeek Harness plugin

dsh-web-search-tavily-nitrazep

Tavily-backed search provider (native web_search via the Tavily /search API) for the DeepSeek Harness web capability seam (ctx.web)

Jump to install

Source facts

Repository
nitrazepam01/dsh-web-search-tavily
Latest update
Aug 14, 2026
Category
Docs & Rendering
GitHub stars
2
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/nitrazepam01/dsh-web-search-tavily
Plugin: dsh-web-search-tavily-nitrazep
Author: nitrazepam01

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only

dsh-web-search-tavily

A Tavily-backed search provider bundle for DeepSeek Harness (dsh). It registers a Tavily backend for the ctx.web web-search seam and ships a hot-switchable backend selector (Tavily / DeepSeek search).

Features

  • Tavily provider — calls POST /search and normalizes results to { url, title, snippet, publishedAt }. Tavily returns content excerpts, so the model can quote snippets directly.
  • Hot backend switcher — a delegating provider (search-switch) sits behind the web row and resolves the active backend from the web-search settings section on every search. Saving the section takes effect immediately: no restart, no loader-row reload.
  • Full WebError taxonomy (WEB_PROVIDER_ERROR / WEB_PROVIDER_CREDENTIAL_MISSING / WEB_ABORTED).
  • Credential resolution chain: literal apiKeycredentials service → launch environment.
  • Settings sections:

- web-search-tavilyapiKey / apiKeyEnv / baseURL / maxResults

- web-searchbackend selection (tavily | deepseek-official)

Install

# From git (recommended — plain JS, no build step, no allowBuilds required)
dsh plugin --profile web add github:nitrazepam01/dsh-web-search-tavily

# From npm
dsh plugin --profile web add dsh-web-search-tavily

# From a local checkout
dsh plugin --profile web add ./dsh-web-search-tavily

Restart dsh web after installing (bundle layers are frozen at boot). To uninstall: dsh plugin --profile web remove dsh-web-search-tavily.

Configuration

1. Credential

Store your Tavily key in $DSH_HOME/.credentials.yaml:

TAVILY_API_KEY: tvly-your-key

2. Backend selection

The web row's searchProvider is set to search-switch (the delegating provider) by this bundle. The active backend lives in the web-search section of $DSH_HOME/settings.yaml and hot-reloads on save:

web-search:
  backend: tavily            # tavily | deepseek-official
  • tavily — this plugin's Tavily provider (results carry content excerpts)
  • deepseek-official — delegates to the shipped web-search-deepseek provider (DeepSeek Anthropic-compatible Messages endpoint; no excerpts)

3. Tavily options (web-search-tavily section)

FieldDefaultDescription
apiKeynoneLiteral key (secret, stored via the credentials domain)
apiKeyEnvTAVILY_API_KEYCredential reference name
baseURLhttps://api.tavily.comTavily REST endpoint
maxResults5Max results per search

How it works

web_search tool → ctx.web (searchProvider: search-switch)
  → switcher delegates by web-search.backend:
      tavily            → this plugin's provider → POST https://api.tavily.com/search
      deepseek-official → shipped provider       → Anthropic Messages + web_search_20250305

Why a delegating provider instead of editing the web row directly? Changing the web row's config restarts the dsh-web plugin and disposes every registered provider (Cordis Fiber.update → restart semantics). The switcher keeps the selection in the settings layer only, sidestepping that hazard entirely.

Development

# Install a local checkout into a profile
dsh plugin --profile web add ./dsh-web-search-tavily

# Inspect the composed config without booting
dsh --profile web --dump-config

dsh web

License

[MIT](LICENSE)