DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Bridge Plugin — DSH Plugin for DeepSeek Harness
← Plugins

dsh-bridge-plugin

Bridge Plugin

DeepSeek Harness plugin: expose the local dsh-bridge browser bridge (Python/Playwright, 4 web AIs) as native DSH tools. PoC registers ask_deepseek; the bridge itself is reused over MCP stdio, not reimplemented.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add dsh-bridge-plugin@0.1.2
READMECompatibilityVersions

Compatibility and provenance

Bridge Plugin is published as dsh-bridge-plugin and currently resolves to version 0.1.2. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
npm
Registry updated
10/16/2026

Versions

0.1.2stable
10/7/2026
0.1.1stable
10/6/2026
0.1.0stable
10/6/2026

Related plugins

Loading related plugins…

Latest
0.1.2
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
47.6 kB
Files
7
Surface
any
License
MIT
Source
npm
Weekly downloads
245
Security scan
✓ v0.1.2 scan passed
View source ↗Project homepage ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in integrations-communication.

Acp App@deepseek-ai/dsh-acp-appThe dsh ACP profile bundle: automation-only JSON-RPC stdio and process lifecycle over dsh-baseAb Publishdsh-ab-publishBrowser-automation publishing tool that logs into and posts to arbitrary websites, in one publishable plugin packageAb Wechat Scrapedsh-ab-wechat-scrape--- description: "The out-of-tree wechat_scrape tool: retrieves WeChat official-account articles, filters promotional blocks, and saves each as a Markdown file, for maintainers of this machine's dsh profiles." kind: "package-reference" ---Im@xmanrui/dsh-im把微信、飞书、企微、钉钉、QQ、Telegram、WhatsApp、Slack、Discord、Matrix接入DSH。 Connect Telegram, WhatsApp, Slack, Discord, Matrix, WeChat, Feishu, WeCom, DingTalk, and QQ to DSH.

README

dsh-bridge-plugin

Ask four web AIs from inside DeepSeek Harness — no API keys, no API bills.

dsh-bridge-plugin exposes a locally running dsh-bridge as native DeepSeek Harness tools. It drives real, logged-in browser sessions on DeepSeek / Doubao / Zhipu / Qwen and returns their answers — consuming free web quotas instead of paid API tokens.

The business logic (Playwright automation, stealth, fallback chains, quality review, rate-limit state machine) stays in the Python bridge. This plugin is only a thin native shell that reuses it over MCP stdio — nothing is reimplemented.

中文说明 · Why not just MCP? · Troubleshooting

flowchart LR
    A["DeepSeek Harness<br/>model + agent loop"] -->|native tool call| B["dsh-bridge-plugin<br/>this package"]
    B -->|MCP over stdio| C["dsh-bridge<br/>Python + Playwright"]
    C --> D["DeepSeek"] & E["Doubao"] & F["Zhipu"] & G["Qwen"]

Features

🧩 Native toolsask_deepseek appears as a first-class DSH tool — no mcp__…__ prefix
♻️ One shared coreThe same Python bridge the MCP integration uses; no duplicated logic
🛡️ Built-in G20 guardRefuses to send while a site is frozen, before touching the network
🪶 Zero dependenciesPure ESM JavaScript, hand-rolled MCP client, no npm deps
🔍 Opt-in diagnosticsBreadcrumb logging you enable only when something misbehaves
🔌 Fail-softA bridge problem degrades this plugin only; it never takes DSH down

Why a native plugin?

DeepSeek Harness already speaks MCP, so the MCP path needs zero code. A native plugin buys what MCP cannot:

MCP bridgeThis plugin
Tool namemcp__dshbridge__ask_deepseekask_deepseek
UIgeneric MCP renderingnative presentCall card
ConfigMCP env/argsDSH Config (Standard Schema)
Lifecyclemanaged by the MCP clientCordis fiber, auto-cleanup on unload/HMR

Requirements

RequirementNotes
DeepSeek HarnessDesktop 0.2.0-rc.2 verified; declares dsh >= 0.1.7-rc.1
Node.js ≥ 20Provided by the DSH host itself
dsh-bridgeThe Python project (uv managed, Python ≥ 3.11)
Playwright browseruv run playwright install chromium inside dsh-bridge
Site loginsuv run dsh-login <site> before real-site calls

Install

Option 1 — npm (simplest)

In DSH open Settings → Plugins → Add plugin and paste the package name:

dsh-bridge-plugin

Or from a shell:

dsh plugin add dsh-bridge-plugin

Option 2 — local directory

Clone this repo, point the Add-plugin dialog at the folder, or use the bundled offline installer (equivalent to dsh plugin add, plus post-install verification):

powershell -ExecutionPolicy Bypass -File install.ps1
# uninstall:
powershell -ExecutionPolicy Bypass -File install.ps1 -Uninstall

Option 3 — GitHub

https://github.com/elysiamsia/dsh-bridge-plugin

Then fully quit and restart DSH Desktop. Closing the window may only minimize it to the tray — quit from the tray icon, or confirm no DeepSeek Harness process remains.

Configure

This package ships no machine-specific paths — its defaults assume dsh-bridge is on your PATH (e.g. after uv tool install . in the dsh-bridge checkout).

Running from a source checkout is the common case, and that path belongs in your profile, not in a published package. Add an override to ~/.dsh/profiles/<profile>/cordis.patch.yml:

# Replace with YOUR absolute path to the dsh-bridge checkout
- id: dsh-bridge-plugin
  config:
    command: uv
    args: [run, --no-sync, dsh-bridge]
    cwd: /absolute/path/to/dsh-bridge
    toolCallTimeoutMs: 180000

A patch replaces the whole config object for that id, so list every field you need.

All configuration fields
FieldDefaultPurpose
commanddsh-bridgeExecutable that starts the bridge
args[]Arguments passed to command
cwd""Working directory (inherited when empty)
env{}Extra environment variables
toolCallTimeoutMs180000Per-call timeout; real-site asks drive a browser

PYTHONIOENCODING=utf-8 and PYTHONUTF8=1 are always forced on the child process — the bridge prints emoji, and Windows' default GBK console would crash it.

Usage

Once loaded, the model can call the tool directly:

Use ask_deepseek to explain the CAP theorem, then summarize it in two sentences.
Tool reference
ToolParametersReturns
ask_deepseekprompt (required), conversation_id (optional){ reply, conversation_id?, site }
dsh_bridge_probeecho (optional){ ok, plugin, echo? } — proves the plugin loaded

dsh_bridge_probe is a zero-dependency diagnostic: if it works but ask_deepseek does not, the problem is the bridge, not the plugin.

⚠️ Rate limit — read before using real sites

This project is built around one hard rule:

Every real-site smoke run revokes all four site accounts at once.

Rule
Allowed sitedeepseek only, smoke tests only
Preconditionuv run --no-sync dsh-verify readiness must report hours_left >= 6.0
Renewaluv run --no-sync dsh-login deepseek

The bridge's ask path does not check the rate limit itself — so this plugin adds a pre-flight gate: before sending, it reads the verify state through the bridge's pure-logic route_task call (no browser, no network) and refuses when the site is frozen, returning an actionable dsh-login message. If the pre-flight check itself fails, the plugin fails closed rather than risk sending.

Troubleshooting

Switch on diagnostics

Logging is off by default. Turn it on for one run:

$env:DSH_BRIDGE_PLUGIN_DIAG = "$env:TEMP\dsh-bridge-plugin.log"

The plugin then writes breadcrumbs for module import, apply entry (including the real shape of ctx), every step, and any exception with a full stack. This is how the "plugin loads but the tool never appears" class of bug is solved without guessing.

The tool never appears

SymptomCheck
Plugin row shows failedDSH_BRIDGE_PLUGIN_DIAG — the log names the failing step
Plugin not listed at allIt was never installed, or DSH was not fully restarted
DSH crashes at startup%APPDATA%\@deepseek-ai\dsh-desktop\logs\crash-*-host.log
A UTF-8 BOM in the profile manifest crashes DSH at startup

DSH reads the profile's package.json with a bare JSON.parse. A BOM makes it throw SyntaxError: Unexpected token '' at readProfileManifest — a startup crash.

Windows PowerShell 5.1's Set-Content -Encoding UTF8 writes a BOM. Always write BOM-less:

[System.IO.File]::WriteAllText($path, $json, (New-Object System.Text.UTF8Encoding($false)))

install.ps1 does this and asserts the result. Mind the inverse trap too: PowerShell scripts containing non-ASCII text must have a BOM, or PS 5.1 decodes them as GBK and fails to parse.

Development

node probe/verify-plugin.mjs                    # pure + registry layers, no browser needed
# then, to also exercise the real bridge:
export DSH_BRIDGE_REPO=/path/to/dsh-bridge      # PowerShell: $env:DSH_BRIDGE_REPO="..."
node probe/verify-plugin.mjs
ScriptPurpose
probe/verify-plugin.mjsSelf-check: pure functions, tool registration, pre-flight gate, bridge
probe/verify-loader.mjsReplays the host loader's six steps against an installed profile
probe/verify-profile.mjsProfile health check (per bundle, detects BOM)
probe/mcp-probe.mjsRaw Node → Python MCP handshake + tools/list
probe/asar-extract.mjsRead a file out of DSH's app.asar (DSH_ASAR=…)

Machine-specific paths are never committed: every script takes them from environment variables and tells you what to set when one is missing.

Releasing

Releases are automated by .github/workflows/publish.yml, which publishes to npm when a v* tag is pushed:

npm version patch        # or minor / major — bumps package.json and creates the tag
git push --follow-tags   # the tag triggers the workflow

The workflow verifies that the tag matches package.json, runs the offline self-check, then publishes with provenance. It needs a repository secret named NPM_TOKEN — a granular access token with "Bypass 2FA" enabled (this npm account uses 2FA; a plain token is rejected in CI with E403). You can also trigger it manually from the Actions tab, where the default is a --dry-run.

Contributing

Issues and pull requests are welcome. Please run the self-check above before opening a PR, and keep the zero-dependency constraint — this package must stay installable via dsh plugin add with no build step and no transitive dependencies.

License

MIT

Acknowledgements

  • dsh-bridge — the Python browser bridge this plugin drives
  • DeepSeek Harness — the host and its Cordis plugin system