Introduction

The plugin ecosystem of DeepSeek Harness (DSH) follows the philosophy of “everything is a plugin”. Some plugins treat browser as an optional dependency, yet hard-declare it in the inject field (for example, dsh-accounts). In DSH’s startup process, if the service named browser is not active, these plugins get stuck in the pending state, causing the startup of the entire profile to fail.

There are already community solutions that provide the browser service (such as dsh-builtin-browser), but that solution ships Electron and conflicts with users who are already using browser-skill—both register the browser_session service, and the tool registry cannot handle duplicate names, which disables the entire tool set.

dsh-browser-bsk was created to resolve the above conflict. It does not provide a standalone browser engine; instead, it wraps the local bsk CLI used by browser-skill into an injectable ctx.browser service for DSH. This means it can coexist with browser-skill and reuse existing daemon sessions and login state.

Core Features

This plugin implements only the basic methods required by the DSH ctx.browser seam. Invoking these methods maps directly to bsk commands:

Method bsk Command Description
open(label) bsk session start Starts a session and returns the session id. label is used only for logging and not for deduplication.
listTabs(session) bsk tab list --session S Returns the list of tabs, including fields such as tabId, url, title, and active.
setValue(session, {target, value}, signal) bsk fill --session S --selector X --value V Fills a form value.
click(session, {target}, signal) bsk click --session S --selector X Clicks an element.
key(session, {key}, signal) bsk press <KEY> --session S Simulates key presses (e.g., Enter).
detectChallenge(session, signal) bsk get-html --session S Reads the page HTML and matches challenge indicators (reCAPTCHA/hCaptcha, etc.) to conservatively decide whether to skip auto-fill.
close(session) bsk session stop <ID> Stops the session and supports idempotent calls.

Installation and Configuration

Install it directly via the DSH CLI:

dsh plugin --profile web add file:/Volumes/Kapp/source/dsh-browser-bsk

After installation, restart DSH. If dsh-accounts was disabled because the browser service was missing, it can now be enabled. In cordis.patch.yml, you can configure the following parameters to adapt to your environment:

- insert:
    - id: browser-bsk
      name: dsh-browser-bsk
      config:
        bskPath: bsk          # bsk CLI 可执行文件路径,默认从 PATH 解析
        timeoutMs: 120000     # 单次命令超时时间
        sessionWidth: 1400    # 可选,会话窗口宽度
        sessionHeight: 900    # 可选,会话窗口高度

Limitations and Notes

  1. Missing Methods: Methods such as navigate, snapshot, execute, and screenshot are not provided. If consumers call these methods, they will directly error.
  2. Locator Strategy: Only CSS selector-based location is supported (by: 'css').
  3. Mutual Exclusivity: This plugin is mutually exclusive with dsh-builtin-browser. Both expose the browser service, and installing both can cause duplicate service registration and conflicts.
  4. Detection Logic: detectChallenge performs marker matching rather than full CAPTCHA-solving capability; it is only used to help decide whether to skip auto-fill.

Conclusion

If you are driving a browser with browser-skill and encounter issues where plugins such as dsh-accounts cannot start because the browser service is missing, dsh-browser-bsk is a compatible solution. It provides the ctx.browser seam, resolves injection conflicts, while preserving session sharing with the native browser-skill.