dsh-plugin-browserskill
Tencent/BrowserSkillBrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edge Agent Window,支持可访问性与 VOM 页面观察、截图、隔离的多会话控制和 Web UI 实时观察浮层。
Tavily 网页搜索:设置页开关,关闭时回落到 DeepSeek 内置搜索;免密钥可用搜索与内容提取,配置 API Key 后解锁爬取与站点地图等 MCP 工具。
Tavily for DeepSeek Harness: adds the Tavily Search API as a web search provider, plus a Tavily MCP bridge — keyless search / extract; crawl / map / research with an API key. Works on DSH 0.1.5 (DSH Desktop) through 0.2.x, in the web profile and in headless / acp / sdk profiles.
npm (stable, official recommendation):
dsh plugin --profile web add @pymodel/dsh-tavily
dsh web
Or follow GitHub (latest commit on the repo):
dsh plugin --profile web add github:pymodel/dsh-research-plugins#path:packages/dsh-tavily
Settings → Plugins → Tavily web search (DSH 0.1.5 / DSH Desktop), or Plugins → @pymodel/dsh-tavily (DSH 0.1.7+): turn the toggle on. The key is optional; leave it blank for keyless search. Test connection at the bottom-left checks that search works now (including keyless).
Pin a commit:
dsh plugin --profile web add github:pymodel/dsh-research-plugins#path:packages/dsh-tavily#<commit>
Remove:
dsh plugin --profile web remove dsh-tavily
dsh.bundle· prebuiltlib/· git install does not needallowBuilds
Authorization: Bearermax_results: 1); keyless if no key, account quota if a key is saved (1 credit). Served on DSH's authenticated /api channel, so other websites cannot call itprefers-reduced-motionmcp__tavily__tavily_search / tavily_extract work keyless; tavily_crawl / tavily_map / tavily_research unlock with TAVILY_API_KEY| Toggle | Key | web_search |
|---|---|---|
| Off (default) | — | official DeepSeek (the host's own provider, with your DeepSeek settings and account sign-in) |
| On | empty | Tavily keyless |
| On | set | Tavily account quota |
Provider id: tavily.
The bundled MCP row registers Tavily's hosted MCP server under the tavily namespace and works out of the box:
X-Tavily-Access-Mode: keyless header selects free rate-limited access to tavily_search and tavily_extract.TAVILY_API_KEY to unlock tavily_crawl / tavily_map / tavily_research and use your account quota. Tool calls may run up to 10 minutes so research reports finish:export TAVILY_API_KEY=tvly-...
or in a project .env / $DSH_HOME/.env:
TAVILY_API_KEY=tvly-...
The key goes into the Authorization: Bearer header at load time — never into the endpoint URL and never into YAML. A key added to .env needs a dsh web restart.
If your profile's cordis.patch.yml already inserts its own Tavily MCP row (id mcp-tavily or serverName tavily), DSH will not boot with both: delete that row, or turn it into an override of mcp-tavily (see Already have your own MCP row?).
| Ref | Meaning |
|---|---|
TAVILY_API_KEY | Optional (search). Present = account quota; absent = keyless |
TAVILY_SEARCH_ENABLED | true = on (the card writes true; 1 / yes / on also count); unset or any other value = off |
The search key and toggle are stored on the credentials plane ($DSH_HOME/.credentials.yaml). Whether an environment variable of the same name overrides the stored value depends on the DSH version (0.2.0: the environment wins and the card shows the field read-only; 0.2.1+: the stored value wins). The MCP bridge reads TAVILY_API_KEY from the launch environment only, because MCP rows resolve before credentials are materialized, so a key saved in the card does not reach the MCP tools. Do not commit real keys.
Optional plugin config (cordis.patch.yml row web-search-tavily):
| Field | Default | Meaning |
|---|---|---|
searchDepth | basic | basic, fast, ultra-fast (1 credit) or advanced (2 credits). Unknown values fall back to basic |
autoParameters | false | Let Tavily tune topic and time range per query; the depth above still applies |
searchTimeoutMs | 30000 | Per-search deadline |
baseURL | https://api.tavily.com | Must be https; plain http only to localhost / 127.0.0.1 (a local gateway) |
The number of results follows the web_search tool's own maxResults (capped at Tavily's 20).
/api channel, so other websites can no longer spend your Tavily credits through it.web is required.{ detail: { error } }) are shown, and rate and plan limits are reported as such.ultra-fast depth is supported, and result counts are capped at 20.apiKey, apiKeyEnv, allowCustomBaseURL and maxResults are gone. The key is always the TAVILY_API_KEY credential.tavily_research.engines.dsh is declared, the tarball ships a LICENSE, and releases are published with npm provenance.settings.register is gone there); the settings card loads its store from @deepseek-ai/dsh-client-store (the removed dsh-client-runtime left it blank and raised a DSH Desktop Safe Mode warning), writes through remote.credentials so Save works, refreshes on credentials/reference-updated, and also renders on 0.1.7's plugin page; peer ranges set to >=0.1.5-rc.2 <0.3.0-0 so DSH 0.2's installer accepts it (tested on 0.1.5-rc.2, 0.1.7-rc.2 and 0.2.0-rc.1); the probe route is released on plugin reload; the web override keeps dsh-base's fetchProvider: http; README documents the duplicate mcp-tavily row conflict.prefers-reduced-motion support): header mode badge with status dot, spinner states on Test/Save, saved confirmation announcement, show/hide key toggle. Server provider adopts the latest Tavily Search API surface behind opt-in config: searchDepth including the new fast tier, and auto_parameters.X-Tavily-Access-Mode: keyless (row always on); keyed auth moved from URL query parameter to Authorization: Bearer header. Search provider: caller cancellation preserved on runtimes without AbortSignal.any.@pymodel/dsh-tavily. Web search provider with settings toggle (off = official DeepSeek, on = Tavily) plus a Tavily MCP bridge (extract / crawl / map). English-only localisation.