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_history logs actions; browser_replay can replay a specific step by number.
  • browser_restrict uses 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 web profile
  • Node.js ≥ 22.19 (as per package.json’s engines)
  • Electron runtime: Typically included with desktop shells; in a pure dsh web environment, 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 web environments who want to launch a visible browser window with zero extra configuration.

Important Notes

  1. The plugin runs with the current dsh process’s permissions; review the source code and license before installation.
  2. The visible browser view, layout, etc., are managed by the host shell (e.g., apps/desktop); this plugin only consumes electronViewHost and self-hosts when no shell is available.
  3. Actions with ✅ guards are constrained by the browser_restrict whitelist; configuration details are in the README’s cordis.patch.yml description (e.g., httpOnly defaults to true, allowing only HTTP(S) navigation).
  4. 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.