egnmosk/dsh-browser-bridge
DeepSeek Harness plugin + browser extension bridge: browser_* agent tools (navigate, click, type, screenshot, eval) over a localhost WebSocket — like Kimi WebBridge / Claude's browser extension.
项目介绍Project Overview
dsh-browser-bridge 是 DeepSeek Harness 插件与浏览器扩展组合,通过本地 WebSocket 让代理读取并控制 Chrome/Edge/Yandex。它提供 13 个 browser_* 工具,支持标签页、导航、DOM 快照、点击输入、滚动、截图和 JS 求值。需要让代理操作网页、读取页面或自动化浏览器时使用。注意:桥接仅绑定 127.0.0.1 且无认证,本地进程可连接;browser_eval 可执行页面 JS,应只授予可信代理。
dsh-browser-bridge is a DeepSeek Harness plugin paired with a browser extension. It connects DSH to Chrome, Edge, or Yandex over a local WebSocket and exposes 13 browser tools for tabs, navigation, DOM snapshots, clicks, typing, scrolling, screenshots, and JavaScript evaluation. Use it when an agent needs to read or automate web pages. Caveat: the bridge listens on loopback without authentication, so any local process may connect; browser_eval runs arbitrary page JS and should be limited to trusted agents.
请帮我了解并安装插件:【dsh-browser-bridge】【https://github.com/egnmosk/dsh-browser-bridge】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add github:egnmosk/dsh-browser-bridge
把 egnmosk/dsh-browser-bridge 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-browser-bridge
A DeepSeek Harness plugin + browser extension pair that lets DSH agents read and control your browser - the equivalent of Kimi's WebBridge extension or Claude's browser extension, but for your own local harness.
+-----------------------------+ WebSocket +--------------------------+
| DeepSeek Harness (dsh) | ws://127.0.0.1:3080/ | Your browser |
| | bridge | (Chrome / Edge / Yandex)|
| browser_* tools | <------------------------> | DSH Browser Bridge |
| (this plugin) | commands / responses | extension (MV3) |
+-----------------------------+ +--------------------------+
The DSH side exposes 13 model-facing tools; the extension side executes them in the browser (tabs, DOM, clicks, typing, scrolling, screenshots, eval).
Agent tools
| Tool | What it does |
|---|---|
browser_status |
Is the extension connected? Bridge URL, pending commands. |
browser_list_tabs |
List open tabs (id, title, url, active). |
browser_activate_tab |
Bring a tab to the foreground. |
browser_navigate |
Open a URL, or reload / back / forward; optional new tab. |
browser_snapshot |
Interactive elements (buttons, links, inputs...) with stable CSS selectors. |
browser_read_page |
Visible page text (or a subtree), capped in characters. |
browser_click |
Click an element by CSS selector. |
browser_type |
Fill an input / textarea / contenteditable (native events). |
browser_press |
Send a key (Enter, Tab, Escape, arrows...). |
browser_scroll |
Scroll the page or a scrollable element. |
browser_wait |
Wait for a selector to appear/disappear, or just let the page settle. |
browser_screenshot |
Save a PNG/JPEG of the current tab to disk (~/.dsh/browser-bridge/). |
browser_eval |
Evaluate a JS expression in the page (content-script world). |
When the extension is not connected, every tool fails with a clear message telling the model (and the user) how to connect it.
Layout
dsh-browser-bridge/
|-- lib/ # the DSH plugin (node side)
| |-- index.js # plugin entry: tools + WS upgrade route + /bridge/info
| |-- ws.js # minimal RFC 6455 WebSocket server (no dependencies)
| |-- bridge.js # connection registry, request/response correlation, timeouts
| `-- tools.js # the 13 browser_* tool definitions
|-- extension/ # the browser extension (Manifest V3)
| |-- manifest.json
| |-- background.js # WebSocket client + chrome.tabs / messaging dispatch
| |-- content.js # DOM actions in pages (top frame only)
| |-- popup.html/js # connection status, read-this-page preview
| |-- options.html/js # server URL, auto-connect, "Test connection"
| `-- icons/
`-- test/run-test.mjs # standalone protocol test (no harness boot required)
Install
- The package lives in the web profile's node_modules
(
~/.dsh/profiles/node_modules/dsh-browser-bridge). - Registered in
~/.dsh/profiles/web/cordis.patch.ymlas rowbrowser-bridge(name: dsh-browser-bridge). - Recorded in
~/.dsh/profiles/web/package.jsondependencies.
Verify the composition at any time:
dsh --profile web --dump-config | grep -A 3 browser-bridge
Activate
The plugin is loaded at boot, so restart dsh web once after installing
(restarting drops the GUI for a few seconds; it comes back on the same URL).
After the restart, the server
prints [browser-bridge] bridge ready - point the DSH Browser Bridge extension at ws://127.0.0.1:3080/bridge, and http://127.0.0.1:3080/bridge/info
answers JSON. Verify with:
dsh --profile web --dump-config | grep -A 3 browser-bridge
curl http://127.0.0.1:3080/bridge/info # -> {"name":"dsh-browser-bridge",...}
Load the extension
- Open your browser: Chrome, Edge, or Yandex (all Chromium).
- Go to
chrome://extensions(Edge:edge://extensions, Yandex:browser://extensions). - Enable Developer mode (top-right toggle).
- Click Load unpacked and select the
extensionfolder of this package. - Click the extension icon - the popup should show Connected to DeepSeek Harness.
The default server URL is ws://127.0.0.1:3080/bridge, which matches dsh web
running on its default port. If your harness listens on another port, open the
extension's Options page, set the URL, and use Test connection.
Then just ask an agent, for example:
Use the browser to open example.com, read the page, and click the first link.
Configuration (cordis.patch.yml)
| Key | Default | Meaning |
|---|---|---|
path |
/bridge |
WebSocket endpoint path on the web server. |
commandTimeoutMs |
60000 |
How long a tool waits for the extension to answer. |
screenshotDir |
~/.dsh/browser-bridge |
Where screenshots are saved. |
maxMessageBytes |
8 MiB |
Max WS message size (screenshots travel over WS). |
Development
node test/run-test.mjs- boots a real server + fake extension client and exercises every tool, timeouts, disconnect, and the/bridge/inforoute (40 assertions, no harness boot required).- Protocol: JSON text frames. Server -> client
request/ping/welcome; client -> serverhello/response/pong. Commands are camelCase in the extension protocol (listTabs,snapshot,click, ...) and snake_case in the model-facing tools.
Security notes
- The bridge binds only to the web server's loopback host (
127.0.0.1by default) and has no authentication: any local process could connect to/bridgeand drive the browser. Treat it like shell access. browser_evalexecutes JavaScript in pages - powerful by design; only grant it to trusted agents.- The extension has
<all_urls>host permissions (required to read tab URLs and act in any page). It talks only to the configured localhost URL.
nexu-io/open-design
freestylefly/awesome-gpt-image-2
anywhere-labs/dsh-desktop
walkinglabs/learn-harness-engineering
awesome-dsh-plugin/awesome-dsh-plugin
MemTensor/MemOS