dsh-web-bridge
Use your logged-in web AI (DeepSeek, GLM, Kimi, Qwen, Doubao...) as model providers in DeepSeek Harness. Web models emit tool calls, DSH runs them under its native permission system, and results return to the same web session. No API keys.
What it is
Use your logged-in web AI (DeepSeek, GLM, Kimi, Qwen, Doubao...) as model providers in DeepSeek Harness. Web models emit tool calls, DSH runs them under its native permission system, and results return to the same web session. No API keys.
How to install
Run this in the DSH web profile, then refresh the page.
$ dsh plugin --profile web add 'git+https://github.com/RSLN-creator/dsh-web-bridge.git#4aaa65ad9ce7f3287b58b8326f37d51786fa3ab9'
DSH versions accepted
Undeclared
Author and traction
RSLN-creator · ★ 21 · Updated 2026-10-25
About this plugin
Harness Web Bridge
English · [中文](README.zh-CN.md)
Use your logged-in web AI — DeepSeek, GLM (Z.ai), Kimi, Qwen, Doubao — as model providers inside
[DeepSeek Harness](https://github.com/RSLN-creator/dsh-web-bridge). Web models emit tool calls, DSH
executes them under its native permission and approval system, and the results go back into the same
web session.
No API keys. It drives the site through your own browser login.
dsh plugin --profile web add dsh-webcode-bridge
---
Status & risks (read this first)
Status: this is a work-in-progress project — behavior and interfaces can change, and a site
redesign can break any site's channel at any time (keeping selectors and protocol teaching aligned
with live pages is the daily work here). Forks and PRs are welcome — see
[CONTRIBUTING.md](CONTRIBUTING.md) for the commit-message shape and the local gates.
Risks — evaluate for yourself before using:
| Risk | What it means |
| --- | --- |
| Site ToS / account restriction | The plugin drives your logged-in web sessions with automation, which may violate a site's terms of service; accounts can be rate-limited or restricted — one of the author's own DeepSeek web accounts has been restricted. Pace your usage (the plugin ships send gaps and backoff, but guarantees nothing). |
| Tool mode = prompt injection | With "local tool calling" enabled, the bridge injects tool-protocol teaching into the web conversation; that content is visible to the site, and compared with plain browser use it widens the surface for being flagged as automation. |
| Page redesigns break things | Every site is "the web page as a backend"; when a site ships a redesign its channel can break. |
| Data locality | Login state lives only in the plugin's local browser profile; no API keys, no telemetry, no cloud component. |
Default mode (important): tool calling is off by default — the bridge is then a pure web
session: the web model receives exactly your words, identical to the browser (no prompt injection,
no call replay). To let the web model call local tools, enable **Settings → Web Bridge → Local tool
calling** (the first card) or the "local tools" pill under the composer — enabling asks for a
confirmation first. Tool calls, once produced, always execute under DSH's native permission system.
Why
Most "web model" integrations are fragile in the same three ways: they scrape HTML, they lose the
conversation when the page reloads, and they bypass the host's tool permissions. This plugin is
built the other way around:
| Concern | How it is handled |
| --- | --- |
| Tool permissions | The web model only proposes calls. DSH runs them with its own permission and approval system — the bridge cannot bypass it. |
| Session continuity | A per-session cursor keeps the web conversation alive across turns, across restarts, and after history rewrites. When the web session is lost the bridge replays the full first turn instead of silently starting over. |
| Long prompts | Over-threshold bodies are delivered as a file attachment, bypassing the composer's write-stall and truncation limits, with an automatic fallback to plain text if any step fails. |
| Rate limits | A configurable send gap (global and per site) plus automatic backoff-and-retry on the site's own rate-limit response. |
Features
- Tool calling is an explicit switch (off by default). By default the bridge is a pure web
session (zero injection, zero replay). When enabled, each site is taught the tool-call shape it
actually accepts (DeepSeek's native token format, GLM's ``json code block, ` tags
elsewhere); the protocol is recomputed from the live tool list every turn, so it never drifts.
- Real site rendering in the DSH right sidebar. Not a screenshot, not a mock — the actual site,
loaded through a same-origin mirror so you can type, scroll and click in it. Login state persists.
- Per-site and global settings. Model, instruction, send gap and prompt-delivery mode can each
be set globally and overridden for a single site — changing one site never disturbs the others.
- Multi-account. One site can hold several independent logins; each gets its own browser profile
and its own request pacing.
- Observable. Every delivery, fallback and rate-limit event is projected into
GET /__webcode/status, so "did it actually work" is answerable from the UI instead of from logs.
Requirements
| | |
| --- | --- |
| Node.js | 22.13 or newer |
| DeepSeek Harness | 0.1.0-rc.6 or newer |
| Browser | None to install — the plugin ships its own Chromium (Playwright). A system browser is used only as a fallback. |
Install
From npm (recommended)
Compare in this category
The five most-starred plugins in the same category.
| Plugin | Author | Stars | Version | Updated |
|---|---|---|---|---|
| dsh-our-free-model | Ebony-Vinyl | 68K | 2.1.0 | 2026-11-10 |
| next-ai-draw-io | DayuanJiang | 36.9K | 0.4.10 | 2026-11-09 |
| MemOS | MemTensor | 12.3K | 0.0.0 | 2026-11-09 |
| bisheng | dataelement | 12.2K | 0.0.0 | 2026-11-10 |
| webnovel-writer | lingfengQAQ | 7.9K | 0.0.0 | 2026-11-07 |