dsh-kimi-webbridge
Manifest validKimi WebBridge for DeepSeek Harness: drive the user's real browser (navigate, click, fill, snapshot, screenshot, evaluate, network, upload, PDF) through the local Kimi WebBridge daemon
Kimi WebBridge for DeepSeek Harness
Give your DeepSeek Harness agents the user's real browser — with their login sessions.
A third-party plugin bundle for DeepSeek Harness (dsh). It turns the local Kimi WebBridge daemon into 16 native kimi_webbridge_* tools — the agent can open pages, read them, click, type, screenshot, run JS, inspect network traffic, upload files, save PDFs, and check daemon/extension health in your real browser, logged in as you.
🚀 What's new in 0.2.0
This is the actively maintained 0.2.0 line. Compared with the original 0.1.0 plugin, it adds:
| Area | 0.1.0 (original) | 0.2.0 (this repo) |
|---|---|---|
| Health check | No status tool | kimi_webbridge_status — tells agents whether the daemon is down or the extension is disconnected |
| Daemon readiness | Polled list_tabs; waited up to 20s when the extension was missing | Polls GET /status; returns immediately with a warning when the extension is not connected |
| Tool policy | Only startDaemonTool on/off | disabledTools — hide high-risk tools such as cdp / evaluate |
| Smoke test | Failed on the second Windows run (EEXIST) | Idempotent on Windows; SKIP_LIVE=1 for CI-only offline runs |
| CI | None | GitHub Actions offline matrix (Windows / macOS / Linux × Node 18/20/22/24) |
| Release hygiene | No changelog | CHANGELOG.md + version 0.2.0 |
| Docs | Mixed rc.6 / rc.7 references | Unified to dsh 0.1.0-rc.7, daemon v1.11.6 |
✨ What it does
| 🧭 Real browser, real sessions | The model drives your actual browser — cookies, logins and all. No scraping, no headless shell. |
| 🛡️ Local-only | Everything happens on your machine: plugin → 127.0.0.1:10086 daemon → your browser. No third-party service sees your traffic. |
| 📦 One file, no build | Pure ESM, zero runtime dependencies beyond the harness's own packages. No TypeScript, no transpile, no API keys. |
| 🔌 Standard Cordis bundle | name / inject / apply + defineTool — the exact pattern the shipped harness tools use. Never touches the dsh installation. |
| 🗂️ Tab groups like the product | One session = one tab group; the model names the group in your language on first use and closes it only when you ask. |
🛠️ What the model gets — 16 tools
| Tool | Purpose |
|---|---|
kimi_webbridge_navigate | Open a URL (new tab or current), set the tab-group label on first use |
kimi_webbridge_find_tab | Re-select a task tab by URL; active:true borrows the tab you're viewing |
kimi_webbridge_list_tabs | List the task's tabs |
kimi_webbridge_snapshot | Read the page as an accessibility tree with @e element refs |
kimi_webbridge_click | Click an element (@e ref or CSS selector) |
kimi_webbridge_fill | Type into inputs, textareas and contenteditable rich editors |
kimi_webbridge_evaluate | Run JavaScript in the page (async supported) |
kimi_webbridge_cdp | Raw chrome.debugger passthrough (advanced escape hatch) |
kimi_webbridge_screenshot | Screenshot the tab or one element; returns a file path |
kimi_webbridge_network | Capture / inspect the tab's network requests |
kimi_webbridge_upload | Upload files to a <input type=file> |
kimi_webbridge_save_as_pdf | Render the current page to PDF; returns a file path |
kimi_webbridge_close_tab | Close the current tab |
kimi_webbridge_close_session | Close the whole tab group — only when you ask |
kimi_webbridge_status | Check daemon/extension health (GET /status) |
kimi_webbridge_start_daemon | Auto-start the local daemon when unreachable |
✅ Requirements & versions
| Component | Version |
|---|---|
DeepSeek Harness (dsh) | 0.1.0-rc.7 (tested) — any build shipping @deepseek-ai/dsh-tools should work |
| Node.js | ≥ 18 (global fetch) |
| Kimi WebBridge daemon | v1.11.6 (tested) |
| Kimi WebBridge browser extension | 1.11.5 (tested) |
| OS | Windows (tested); macOS/Linux supported by code paths, not yet verified |
Compatibility is pinned to what was actually verified. Run
node tests/smoke.mjsafter installing to check your environment.
📦 Installation
Option A — from GitHub (recommended):
dsh plugin --profile demo add github:Bernardxu123/dsh-kimi-webbridge
dsh --profile demo web
Option B — from a local checkout:
dsh plugin --profile demo add ./dsh-Kimi-WebBridge
dsh --profile demo web
Option C — no install, one-off overlay (kimi-webbridge.overlay.yml):
- insert:
- id: kimi-webbridge
name: '/absolute/path/to/dsh-Kimi-WebBridge/index.js'
config:
session: dsh
dsh web --patch ./kimi-webbridge.overlay.yml
Option D — permanent merge: copy the insert block from cordis.patch.yml into $DSH_HOME/profiles/<name>/cordis.patch.yml (or $DSH_HOME/cordis.patch.yml for all profiles).
Uninstall:
dsh plugin --profile demo remove dsh-kimi-webbridge
The CLI removes the dependency and reconciles the profile's layer list; the 16 tools unregister. Verify the row is gone:
dsh --profile demo --dump-config # the kimi-webbridge row must not appear
⚠️ Known harness caveat (dsh 0.1.0-rc.7, discussion #913): on rare transient pnpm failures the entry can remain in
dsh.profile.bundles, and the profile then fails to boot withcannot resolve profile bundle "dsh-kimi-webbridge"—dsh plugin installdoes not fix it (community analysis: #917). Recovery: edit the profile'spackage.jsonand delete"dsh-kimi-webbridge"fromdsh.profile.bundles, then boot again.
Only runtime files (
index.js,cordis.patch.yml, READMEs, LICENSE) are installed;docs/andtests/stay in this repository. Verified withnpm pack.
🚀 Quick start
- Install the bundle and start
dsh web --profile demo. - Wait for the
kimi_webbridge_*tools in the catalog. - Ask: "Open example.com in the browser, tell me what's on the page, and screenshot it."
- The agent opens a tab group (named in your language), reads the page via
snapshot, saves the screenshot, and shows you the file.
⚙️ Configuration
All keys optional; override the kimi-webbridge row from a later patch layer, restating every key you need:
- id: kimi-webbridge
name: dsh-kimi-webbridge
config:
baseUrl: 'http://127.0.0.1:10086' # daemon endpoint
session: dsh # daemon-side tab-group name (one per profile)
requestTimeoutMs: 120000 # per-request timeout
startDaemonTool: true # expose kimi_webbridge_start_daemon
daemonBin: null # override the auto-detected daemon binary
maxRenderText: 50000 # cap on rendered result text
disabledTools: [] # optional tool names to hide, e.g. ['kimi_webbridge_cdp', 'kimi_webbridge_evaluate']
✅ Done / ⚠️ Not done
Done and verified
- All 16 tools end-to-end tested through the real harness + real browser (dsh 0.1.0-rc.7, daemon v1.11.6): navigation, clicking through to real sites, form fill + value verification, file upload +
files.lengthverification, network capture, CDP layout metrics, screenshots, PDFs, tab management, daemon self-start, status/health checks. - Automatic retry for capture tools (a fresh tab's first screenshot can stall while the page settles — a retry returns instantly).
- Graceful daemon-unreachable errors with a self-heal path (
kimi_webbridge_start_daemon), tested against a dead port via--patch. - Per-tool enable/disable via
disabledTools(hidecdp/evaluatefor untrusted policies). - Schema strictness verified against the real
@deepseek-ai/dsh-toolscompile + raw-JSON-schema boundary checks (tests/smoke.mjs).
Not done / known limits
fill/clickare ignored by sites that strictly checkevent.isTrusted(banking portals, captchas) — those need manual interaction. Trusted input is possible at the protocol level viacdp, but that is advanced.- Cross-origin iframes are out of scope:
snapshot/click/fill/evaluateoperate on the top frame only. sessionis per-profile, not per-agent: subagents share the same tab group. Per-agent session isolation is a future idea (see below).- macOS/Linux code paths exist but were not verified on real machines.
- CDP is limited to what the extension exposes (browser-level domains such as
Browser.*are not available).
🗺️ Roadmap — routes that work and routes that don't
Viable routes
- ✅ Direct HTTP to the daemon (this plugin) — the only interface WebBridge exposes today.
- ✅ Per-profile session naming; config-driven tool toggles (
startDaemonTool). - ✅ Health/status tool over
GET /status. - ✅ Per-tool enable/disable via
disabledTools. - 🔜 Per-agent session mapping.
- 🔜 Publishing to npm once the harness API is stable.
Dead ends (don't go here)
- ❌ Mounting via
@deepseek-ai/dsh-mcp-client— WebBridge has no MCP endpoint (/mcpand/ssereturn 404; only/commandand/statusexist). The MCP route used by e.g. Exa does not apply. - ❌ OAuth login flows (
mcp.exa.ai?login-style) — not supported by the daemon bridge; API keys are not a WebBridge concept either. - ❌ Daemon lifecycle beyond
start— the plugin never runsstop/restart/uninstall; that is always the user's call. - ❌ Headless / VM automation — the model acts as you, in your browser; this is not a scraping or CI tool.
🔐 Security
- The daemon listens on
127.0.0.1only; the model operates your browser as you. Review what your harness is allowed to ask for. - The plugin stores and sends no credentials, has no filesystem access, and never modifies the
deepseek-harnessinstallation. kimi_webbridge_cdpandkimi_webbridge_evaluateare powerful; disable them for untrusted model policies withdisabledTools: ['kimi_webbridge_cdp', 'kimi_webbridge_evaluate'].
🧪 Verifying your install
node tests/smoke.mjs
Offline registration + schema-boundary checks always run; live daemon round-trips (navigate → snapshot → evaluate → screenshot → close) run when the daemon is reachable. Set SKIP_LIVE=1 to force offline-only mode (used by CI).
🙏 Credits & thanks
- DeepSeek — for the DeepSeek Harness agent runtime and its plugin architecture (
dsh, Cordis,dsh-tools). - Moonshot AI — for Kimi WebBridge, the local browser bridge this plugin drives.
- The Koishi/Cordis ecosystem — for the plugin framework (
cordis,schemastery) that DeepSeek Harness is built on, and whose conventions this plugin follows.
📌 Version & compatibility
- Plugin: 0.2.0
- Tested with: dsh 0.1.0-rc.7 · Node 24 (≥18 required) · Kimi WebBridge daemon v1.11.6 / extension 1.11.5 · Windows
- Dependencies: none declared —
@deepseek-ai/dsh-toolsresolves at runtime from the harness installation (no registry copies are installed)
📚 More docs
📄 License
MIT. Not an official DeepSeek or Moonshot product. WebBridge is a product of Moonshot AI.
Comments
Loading…
From the same category
DeepSeek Harness plugin for Reactive Resume: bridges your resumes and job applications into a Harness session over MCP.
★ 41.7k
↓ 156/wk
MIT
Aug 24, 2026
dsh plugin --profile web add dsh-plugin-reactive-resumeby Tencent
Let AI agents use your real, logged-in browser without interrupting your work. CLI + extension for browser automation across any shell-capable AI agent.
★ 8.6k
↓ 6.1k/wk
MIT
TypeScript
Oct 10, 2026
dsh plugin --profile terminal add @wxg-prc-cpg/browser-skill-dsh-pluginby yjh051108
dsh-routing-suite — injector + router-standard kit: install the runtime injector first, then the task-aware reasoning-mode router preset (measured P1-P23).
★ 7k
MIT
JavaScript
Sep 18, 2026
dsh plugin --profile web add @dsh-external/dsh-super-injectorby Q00
Agent OS: the agent gets smarter on its own. We just hold the line: Interview-gated, staged evaluation, budgeted evolution loop. MCP server, 14 runtimes: Claude Code, Codex CLI, Gemini CLI, OpenCode,
★ 6.2k
MIT
Python
Oct 7, 2026
by dsh-market
The plugin market inside DeepSeek Harness — browse, search, one-click install · DSH 可视化插件市场
★ 6.1k
↓ 112.4k/wk
MIT
TypeScript
Oct 10, 2026
dsh plugin --profile web add dshmarketby superdesigndev
OpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn
★ 5k
NOASSERTION
Python
Oct 11, 2026
dsh plugin --profile web add treg-dsh