Drive the user's real browser through the local Kimi WebBridge daemon: navigate, find-tab, snapshot, click, fill, evaluate, CDP, screenshot, network, upload, PDF export and tab-management tools that reuse existing login sessions.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:MicroHEROX/dsh-Kimi-WebBridge
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
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 15 native kimi_webbridge_* tools — the agent can open pages, read them, click, type, screenshot, run JS, inspect network traffic, upload files, and save PDFs in your real browser, logged in as you.
✨ 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 — 15 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_start_daemon |
Auto-start the local daemon when unreachable |
✅ Requirements & versions
| Component | Version |
|---|---|
DeepSeek Harness (dsh) |
0.1.0-rc.6 (tested) — any build shipping @deepseek-ai/dsh-tools should work |
| Node.js | ≥ 18 (global fetch) |
| Kimi WebBridge daemon | v1.11.5 (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:MicroHEROX/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 15 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.6, 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
✅ Done / ⚠️ Not done
Done and verified
- All 15 tools end-to-end tested through the real harness + real browser (dsh 0.1.0-rc.6, daemon v1.11.5): 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. - 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. - 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).- No
status/health tool yet (the daemon exposesGET /status, but there is no tool for it — a good first contribution). - 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-agent session mapping; config-driven enable/disable of individual tools. - 🔜 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.
🧪 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.
🙏 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.1.0
- Tested with: dsh 0.1.0-rc.6 · Node 24 (≥18 required) · Kimi WebBridge daemon v1.11.5 / 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.
Links
More in this category
liustack/modlens★ 1398
Vision bridge for text-only models: paste an image, get structured JSON evidence (OCR, layout, semantics).
Anionex/dsh-vision-toolkit★ 361
Vision tasks for text-only models: intent-aware image Q&A, long-screenshot OCR, UI reproduction, grounding, and pixel diff.
zhaoolee/notes★ 141
Export DSH conversations as Smartisan Notes-style PNGs, or create and update Markdown notes in a configured account-scoped workspace.
Lum1104/dsh-browser★ 101
Chrome sidebar extension that lets DSH operate your browser directly, no vision capabilities required.
dsh-market/dsh-market★ 96
The plugin market inside DSH: a Settings page to browse and search the full community catalog by category, with confirmed one-click installs and an installed-plugins view.
liustack/modsearch★ 95
Web search bridge for text-only agents: ask the web or X, get structured JSON evidence (search, fetch, citations).