DeepSeek Harness Plugin

jakehemmerle/dsh-web-search-exa

Stars ★ 0 Category Browser & Web Added 2026-11-02

Exa search provider for the dsh-web seam: the web_search tool sends queries to Exa's /search API and returns the results as sources, in dsh web, dsh-TUI and headless runs. Needs an Exa API key (EXA_API_KEY, the credential store or a key file read on every search). web_fetch is unchanged and there is no UI.

Install

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:jakehemmerle/dsh-web-search-exa

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

An Exa search provider for DeepSeek Harness. It registers the provider exa on the @deepseek-ai/dsh-web seam, so the web_search tool sends its queries to Exa's /search API and returns the results as sources. It works the same from dsh web, dsh-TUI and headless runs. web_fetch is unchanged. The plugin has no UI of its own.

Install

The package is a dsh bundle. Use the profile you run (web, headless, …):

dsh plugin --profile web add github:jakehemmerle/dsh-web-search-exa#v0.3.0-rc.1
export EXA_API_KEY=…   # in the environment that launches dsh

The bundle's cordis.patch.yml pins the web seam's searchProvider to exa and adds the web-search-exa row. Restart dsh web after installing.

This release is qualified against DSH 0.2.1-rc.2; its peer pin is exact, so other DSH versions need dsh plugin allow-version or a newer release.

Configuration

Override the row in your profile's own cordis.patch.yml. A patch replaces the whole row config, so restate any field you keep.

Field Default Meaning
apiKeyEnv EXA_API_KEY Key name: looked up in dsh's credential store, then (after apiKeyFile) in the environment
apiKeyFile (unset) File holding the key (raw or dotenv), read on every search, so a rotated key needs no restart; it wins over the environment
apiKey (unset) Literal key, used before any other source (avoid)
baseURL https://api.exa.ai Exa API origin
type auto Exa search type
highlightChars 600 Highlight length per result
timeoutMs 30000 Request timeout
- id: web-search-exa
  config:
    apiKeyFile: /run/secrets/exa

Development

nix flake check runs the fast suites against the pinned dsh; nix run .#e2e runs the real dsh web (Playwright), dsh-TUI (private tmux) and headless suites against a local mock Exa. See SPEC.md, TESTING.md and RELEASING.md.

License: MIT.

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.