
Security News
Deno Goes the Way of the Dinosaur
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.
dsh-kimi-webbridge
Advanced tools
Kimi 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
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.
| 🧭 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. |
| 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 |
| 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.
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.
dsh web --profile demo.kimi_webbridge_* tools in the catalog.snapshot, saves the screenshot, and shows you the file.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 and verified
files.length verification, network capture, CDP layout metrics, screenshots, PDFs, tab management, daemon self-start.kimi_webbridge_start_daemon), tested against a dead port via --patch.@deepseek-ai/dsh-tools compile + raw-JSON-schema boundary checks (tests/smoke.mjs).Not done / known limits
fill/click are ignored by sites that strictly check event.isTrusted (banking portals, captchas) — those need manual interaction. Trusted input is possible at the protocol level via cdp, but that is advanced.snapshot/click/fill/evaluate operate on the top frame only.session is per-profile, not per-agent: subagents share the same tab group. Per-agent session isolation is a future idea (see below).status/health tool yet (the daemon exposes GET /status, but there is no tool for it — a good first contribution).Browser.* are not available).Viable routes
startDaemonTool).GET /status; per-agent session mapping; config-driven enable/disable of individual tools.Dead ends (don't go here)
@deepseek-ai/dsh-mcp-client — WebBridge has no MCP endpoint (/mcp and /sse return 404; only /command and /status exist). The MCP route used by e.g. Exa does not apply.mcp.exa.ai?login-style) — not supported by the daemon bridge; API keys are not a WebBridge concept either.start — the plugin never runs stop/restart/uninstall; that is always the user's call.127.0.0.1 only; the model operates your browser as you. Review what your harness is allowed to ask for.deepseek-harness installation.kimi_webbridge_cdp and kimi_webbridge_evaluate are powerful; disable them for untrusted model policies.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.
dsh, Cordis, dsh-tools).cordis, schemastery) that DeepSeek Harness is built on, and whose conventions this plugin follows.@deepseek-ai/dsh-tools resolves at runtime from the harness installation (no registry copies are installed)MIT. Not an official DeepSeek or Moonshot product. WebBridge is a product of Moonshot AI.
FAQs
Kimi 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
The npm package dsh-kimi-webbridge receives a total of 75 weekly downloads. As such, dsh-kimi-webbridge popularity was classified as not popular.
We found that dsh-kimi-webbridge demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.

Security News
On Front Lines’ Early Adopters: CISO podcast, Andrew Becherer shares lessons from Datadog, weighs the long-term costs of AI-built tools, and explains how founders can actually gain a CISO’s trust.