@anysearch/anysearch-dsh: AnySearch web search for DeepSeek Harness
AnySearch web search provider and advanced search tools for DeepSeek Harness (DSH)
At a glance
- What is it?
- A plugin that wires AnySearch into DeepSeek Harness so the agent's own web_search and web_fetch calls hit AnySearch instead of the default provider, plus three advanced tools for vertical and batch search.
- Who is it for?
- Adopt it if you already run DeepSeek Harness and want its built-in web_search and web_fetch backed by AnySearch, including the anonymous quota, before you sign up for a key.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 23 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 16, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The problem: DeepSeek Harness ships a search tool, not a search backend
DeepSeek Harness exposes web_search and web_fetch as built-in tools, which means an agent can ask for a search without any plugin at all. What it does not ship is the index behind those calls. @anysearch/anysearch-dsh is the adapter that fills that slot. It registers AnySearch as the provider for the existing ctx.web search and fetch path, so the tool names a model already knows keep working and only the results change.
The audience is narrow and specific: people running DSH who want the agent's search results to come from AnySearch's coverage of the public web plus vertical sources the README lists as code, finance, academia, law and security. If you are not running DSH, this package has nothing to offer you. It is a plugin, not a standalone search client, and package.json declares @deepseek-ai/cordis as a peer dependency rather than bundling a host.
How the plugin reaches into Harness: one provider entry, five tools
The wiring is a bundle patch. package.json declares a dsh.bundle.patch field pointing at cordis.patch.yml, and the README describes that bundled profile layer as automatically selecting AnySearch as the existing ctx.web search and fetch provider, enabling web_fetch, and mounting the advanced tools. No manual configuration is required by default, which is why the quick start has no config step in it.
The tool surface splits in two. Ordinary prompts stay on the host's own web_search and web_fetch, so a model that already knows those names needs no new instructions. Three tools are added on top: anysearch_capabilities discovers searchable domains, vertical categories and supported parameters in real time; anysearch_search runs a vertical or parameterized query using tags, regions, languages and structured parameters; anysearch_batch_search runs one to five searches concurrently. The README states that an individual failure in a batch does not affect the other results, which is the sensible design for a fan-out call, and that advanced search can return cleaned page content on demand.
One deliberate omission is worth noting. URL extraction is exposed through Harness's provider-neutral web_fetch, and the README says the plugin does not add a duplicate anysearch_extract tool. That keeps the tool list clean, but it also means the extraction path is only as stable as the host's web_fetch contract. The release history supports that reading: v0.1.2 introduced native web fetch with AnySearch Extract, v0.1.3 fixed web fetch for current extract responses, and v0.1.4 restored web fetch across DSH preview versions.
Installing the plugin and running a first search
Installation goes through the DSH plugin command against the web profile. The README gives this exact invocation, and it is the same on Windows, Linux and macOS:
npx -y @deepseek-ai/dsh plugin --profile web add @anysearch/anysearch-dshThe DSH plugin command uses pnpm to manage profile dependencies, so pnpm must be on PATH before you run it. Harness itself starts with:
npx -y @deepseek-ai/dsh webAt this point you can search. No API key is required for a quick start; the README says requests use AnySearch's anonymous quota until you configure one. Ask the agent something that needs current information and it should route through web_search as usual, with AnySearch returning titles, snippets and URLs.
If you want the larger quota, the README states that an AnySearch account with an API key gets 1,000 free search calls per day. The key goes into the DSH credential file, which defaults to ~/.dsh/.credentials.yaml:
ANYSEARCH_API_KEY: "as_sk_your_key"The plugin resolves the managed credential for every operation, so rotating the key reaches the next request without restarting DSH. A launching ANYSEARCH_API_KEY environment variable takes higher priority than the file. To confirm the profile composed correctly without printing the secret, the README offers:
npx -y @deepseek-ai/dsh --profile web --dump-configTo override defaults, add a block to the target profile's user configuration layer. Keep the id unchanged, replace the whole config, and do not add a second AnySearch provider under a different ID:
- id: web-search-anysearch
config:
apiKeyEnv: ANYSEARCH_API_KEY
baseURL: https://api.anysearch.com
maxRenderedContentChars: 12000Those three fields are the entire documented configuration surface. maxRenderedContentChars caps how much cleaned content is rendered to the model per advanced tool call, and 12000 is the default.
Where it breaks: preview churn, credential plumbing and a missing settings field
The README's own compatibility section is the most useful part of the document. It states that DeepSeek Harness is in developer preview and may make compatibility-breaking changes. Three releases in six days, all of them about web fetch behaviour, are what that risk looks like in practice. If you pin this plugin and the host moves, extraction is the first thing to check.
Credential handling has a real gap. The README says the DSH settings page does not currently provide a third-party Provider credential field, so the key has to be placed in the credentials file or supplied as an environment variable. There is no UI path. For a single developer machine that is fine; for a shared or managed deployment it means the secret lives in a file you provision yourself.
The anonymous quota is also worth being clear-eyed about. The README does not state a number for it, only that it exists and that configuring a key raises you to 1,000 calls per day. If you are evaluating whether the free tier is enough for your workload, the repository does not answer that question.
Finally, the batch limit is hard: one to five searches. If your research pattern is a fan-out over dozens of queries, you will be chunking them yourself, and the concurrency benefit shrinks accordingly.
Compared with the MCP route and with a self-hosted search stack
The repository ships docs/integration-options.zh-CN.md, described as a comparison of DSH plugin, Skill, MCP and HTTP integration. That framing is the honest one: the real alternative is not a different search vendor, it is a different way of attaching the same API. An MCP server would expose search as a separate tool surface the model discovers at runtime, which keeps the integration out of the host's provider layer but adds a second tool vocabulary alongside web_search. The plugin route chooses the opposite trade: fewer moving parts, but it depends on the host's provider interface staying put, which is exactly the interface that has been moving.
A self-hosted stack (your own crawler plus an index such as a local search engine) trades API quota and per-call cost for infrastructure you operate and content you are allowed to index. It is the right answer when the queries are internal or the corpus is private, and the wrong answer when you need coverage of the open web today. AnySearch's stated value is breadth across verticals, which is not something a small self-hosted index reproduces. The plugin does not attempt to be that; it is a thin provider adapter, and it should be judged as one.
Maintenance, licence and what upgrading costs you
The repository is not archived and the last push was on 2026-08-26. The version in package.json is 0.1.4, matching the most recent release tag from 2026-08-25. That is a short history: three releases in the 0.1.x line, all within August 2026, all narrow in scope. Treat it as a young package rather than a settled one, and read the release titles as a map of where the friction has been.
Upgrading is a single command against the same profile:
npx -y @deepseek-ai/dsh plugin --profile web update @anysearch/anysearch-dshRemoval is symmetric, using remove in place of update. Because the plugin is installed into a DSH profile through pnpm, the upgrade cost is mostly the cost of the host's own churn rather than anything in this package.
The licence is MIT, declared in package.json and in the LICENSE file at the repository root. MIT is permissive: it lets you use, modify and redistribute the code with the copyright notice and licence text retained, and it comes with no warranty. That is a statement about the licence text, not legal advice about your situation. One practical implication worth flagging: the code is MIT, but the search results come from AnySearch's API under AnySearch's own terms, and the two are separate questions.
Editorial conclusion
Adopt it if you already run DeepSeek Harness and want its built-in web_search and web_fetch backed by AnySearch, including the anonymous quota, before you sign up for a key. Do not adopt it if you are not on DSH, or if you need a search provider that is independent of a developer-preview host: the README states plainly that Harness may make compatibility-breaking changes, and the v0.1.2 through v0.1.4 releases are all fixes to web fetch behaviour across shifting Harness preview versions. Verify first that Node.js 22.19 or Node.js 24+, pnpm 11.7 and npx are all on PATH, then run the --dump-config command to confirm the composed profile resolves ANYSEARCH_API_KEY the way you expect before you put a key in ~/.dsh/.credentials.yaml.
Frequently asked questions
Do I need an AnySearch API key to use @anysearch/anysearch-dsh?
No. The README states that no API key is required for a quick start and that requests use AnySearch's anonymous quota until you configure one. Configuring a key from an AnySearch account raises the allowance to 1,000 free search calls per day.
How do I install @anysearch/anysearch-dsh into DeepSeek Harness?
Run the DSH plugin command against the web profile: npx -y @deepseek-ai/dsh plugin --profile web add @anysearch/anysearch-dsh. The README notes that the command uses pnpm to manage profile dependencies, so pnpm must be available on PATH, along with Node.js 22.19 or Node.js 24+.
Where should the AnySearch API key be stored for @anysearch/anysearch-dsh?
In the DSH credentials file, which defaults to ~/.dsh/.credentials.yaml, under the key ANYSEARCH_API_KEY. The README also notes that a launching ANYSEARCH_API_KEY environment variable has higher priority, and that the DSH settings page does not currently provide a third-party Provider credential field.
Community notes