Introduction¶
In DeepSeek Harness (DSH), to have an agent operate on web pages, the common approach is to use a headless browser or remote screen broadcasting: the model can “operate,” but users often cannot see the same page, making it difficult to intervene promptly during login or CAPTCHA verification. dsh-builtin-browser (repository wqty123/dsh-browser) takes a different path: it installs a real, visible, and shareable browser into DSH. The agent drives it via 20 browser_* tools, and users and the agent operate on the same page, allowing users to take over directly when needed.
This article introduces the plugin’s positioning, capabilities, installation method, and typical usage. The information is sourced from the GitHub repository README and package.json (current version v0.1.15).
What It Is¶
dsh-builtin-browser is a DSH plugin published by maintainer wqty123, with the npm package name dsh-builtin-browser, licensed under MIT. The SkillHub directory classifies it as a client-side plugin; it has approximately 19 stars on GitHub.
In one sentence: Installing the plugin = gaining a real browser that is shared with the user and driven by the agent.
The key difference from headless solutions is that the browser uses native WebContentsView, not screen broadcasting. When a desktop shell is available, it embeds into the shell’s view; in a pure dsh web environment, the plugin can also self-host—launching its own Electron window (titled dsh-browser) without additional configuration.
Core Features¶
Shared Real Browser and Human-in-the-Loop¶
Users can directly see what the agent is doing and take over at any time; the agent drives the exact window the user is viewing.
20 browser_* Tools¶
After installation, the agent automatically gains a complete set of browser tools covering page opening, viewing, manipulation, form filling, screenshotting, download management, and login state handling. Common tools include:
| Goal | Tool | Description |
|---|---|---|
| Open a page | browser_open |
Opens a URL and returns a snapshot with numbered elements |
| Inspect a page | browser_snapshot |
Lists input fields, buttons, and links with numbers |
| Manipulate a page | browser_execute |
Executes JavaScript within the page (native setters, framework-friendly) |
| Fill forms | browser_fill |
Fills multiple fields at once, with optional submission |
| Capture a page | browser_screenshot |
Takes a PNG screenshot, which can be saved and sent to a vision model |
For the full list and parameters, see the repository’s Tool Reference.
DOM-Level Driving and Framework Compatibility¶
browser_snapshot returns interactive elements with numbers; browser_execute runs JavaScript within the page, using native setters for controlled input and triggering input/change events. This allows reliable interaction even with React and Vue pages.
Multi-Tab and Task-Level Session Isolation¶
Supports opening multiple URLs in parallel, with capabilities to view, switch, close, and reset tabs. Each DSH task (session) has its own isolated browser session (separate tabs and history), so concurrent tasks do not interfere with each other. Multiple calls within the same task reuse the same session.
Login State, CAPTCHA, and Downloads¶
browser_auth: Exports/restores cookies, preserving login state after restart; cookies from self-hosted instances are also persisted to disk.browser_challenge: Detects challenges like Cloudflare, reCAPTCHA, hCaptcha, and Turnstile, prompting manual completion in the shared window.browser_download: Downloads files within the page context while carrying session cookies (up to 256MB).
Action History, Replay, and Security Restrictions¶
browser_historylogs actions;browser_replaycan replay a specific step by number.browser_restrictuses a whitelist to limit allowed browser actions; read-only tools (browser_snapshot,browser_content,browser_screenshot, etc.) are not restricted.
Multi-Format Content Scraping¶
browser_content supports scraping pages in HTML, Markdown, TXT, or JSON formats, with options for CSS selectors, character limits, and timeout control.
Architecture and Self-Hosting¶
The plugin mounts three layers via cordis.patch.yml: browser (seam), browser-electron (provider), and tool-browser (tool layer). When no desktop shell is available, the plugin launches an Electron subprocess via host-main.js, driven over local TCP JSON-RPC; the subprocess automatically restarts if it crashes. The README notes that Electron 33.x has compositor issues, recommending version ≥ 40.
Installation and Activation¶
Requirements:
- DeepSeek Harness installed and configured with the
webprofile - Node.js ≥ 22.19 (as per
package.json’sengines) - Electron runtime: Typically included with desktop shells; in a pure
dsh webenvironment, the plugin automatically locates the latest Electron binary available.
README badges indicate verification on Windows; compatibility on other platforms must be verified by the user.
Installation commands (as per README):
# Option 1: Install from npm (published)
dsh plugin --profile web add dsh-builtin-browser
# Option 2: Install from source directory (standalone repository)
dsh plugin --profile web add <path-to-this-repo>
Before installation, review the source code and MIT license to confirm the plugin will run with the current dsh process’s permissions.
Typical Usage¶
Once installed, the agent can call the browser_* tools. A common workflow is to open a page, read the snapshot, then manipulate or fill forms.
1. browser_open(url) → Opens the page and returns a snapshot with numbered elements
2. browser_snapshot() → Lists interactive elements with numbers
3. browser_execute(...) → Executes click, submit, etc., by number or selector
4. browser_screenshot() → Takes a screenshot when visual localization is needed; optional savePath to persist
For batch form filling, use browser_fill to fill multiple fields at once. For persistent login, manually log in, then use browser_auth to export cookies; restore them in subsequent sessions.
Action discipline (from README): Prioritize form.requestSubmit() for form submissions, element.click() for clicks; coordinate-based clicking is a last resort—immediately click after obtaining coordinates, and verify the hit with document.elementFromPoint(x, y) beforehand.
Use Cases and Considerations¶
Who It’s For
- Developers who need web automation in DSH and want visibility and takeover capability over the same browser.
- Agent workflows requiring login state management, CAPTCHA handling, and cookie-based downloads—typical “real browser” scenarios.
- Users of DSH desktop shells or pure
dsh webenvironments who want to launch a visible browser window with zero extra configuration.
Important Notes
- The plugin runs with the current dsh process’s permissions; review the source code and license before installation.
- The visible browser view, layout, etc., are managed by the host shell (e.g.,
apps/desktop); this plugin only consumeselectronViewHostand self-hosts when no shell is available. - Actions with ✅ guards are constrained by the
browser_restrictwhitelist; configuration details are in the README’scordis.patch.ymldescription (e.g.,httpOnlydefaults totrue, allowing only HTTP(S) navigation). - SkillHub (skillhub.cn) is a community plugin directory with no official affiliation to DeepSeek or High-Flyer; DSH’s ecosystem philosophy is “everything is a plugin.”
Conclusion¶
dsh-builtin-browser turns the concept of a “shared real browser” into an installable DSH plugin: ready to use out of the box, human-agent shared view, and 20 browser_* tools covering common needs from opening pages to login state and downloads. If you’re building a visible, takeover-capable web agent in DSH, you can obtain the package and documentation from the directory page or GitHub.
- Directory page: https://www.skillhub.cn/plugins/wqty123/dsh-browser
- GitHub: https://github.com/wqty123/dsh-browser