Preface¶
DeepSeek Harness (dsh) is an agent runtime open-sourced by DeepSeek AI. The official repository summarizes its design in one sentence: Everything is a plugin. It is currently in developer preview, and incompatible changes may occur during upgrades. There is already an independent community plugin directory (https://deepseek-harness-plugin.com/en-US/plugins/) for searching and installing various third-party plugins; this site has no official affiliation with DeepSeek / Hunyuan and should not be treated as an official app store.
When an agent needs to operate a web page, the common practice is to spin up a separate headless browser and use screenshots for visual positioning. However, login status, cookies, and already opened background pages often cannot be connected. dsh-browser takes a different approach: it connects dsh to the Chrome tab you are currently using, converts the page into structured text with numbered labels, and lets the model interact with controls, fill forms, scroll and navigate using the numbers. No screenshots are passed into the model-facing pipeline.
Below is an introduction to what it is, what it can do, how to install it, and how to use it, based on the publicly available materials from the directory page and the GitHub repository.
What is it¶
dsh-browser is a UI enhancement plugin maintained by GitHub user Lum1104, licensed under MIT (copyright attributed to Yuxiang Lin, 2026). Repository address: https://github.com/Lum1104/dsh-browser. Community directory page: https://deepseek-harness-plugin.com/en-US/plugins/dsh-browser/. As of August 17, 2026, it has approximately 210 stars on GitHub, with TypeScript as the primary language.
It is not a standalone npm package, but an independent pnpm workspace that contains two components:
- packages/browser/bridge-browser/: A browser bridge plugin for dsh (includes cordis.patch.yml), with the package name @deepseek-ai/dsh-bridge-browser registered in the installation script
- extensions/dsh-browser/: A Chrome Manifest V3 extension, named “dsh Browser Helper” after installation
The README clearly states its purpose: connect DeepSeek Harness to the Chrome tab you are currently using. The model can read page content, click controls, fill forms, scroll and navigate, while retaining login status, sessions, and cookies; a sidebar provides a chat interface. The entire integration uses a pure text design: the page is converted into structured text and a list of numbered interactive elements, and the model locates elements via their numbers.
One common pitfall: the unscoped dsh-browser package on npm belongs to another project and has nothing to do with this repository. This project has not published an npm package yet, do not install it using npm install dsh-browser.
Core Features¶
The tools listed in the repository README are as follows.
1. Read page: browser_snapshot. Returns title, URL, main content, numbered interaction list, and form fields; sensitive values will be masked. When the parameter delta: true is used, only changes will be returned.
2. Click element: browser_click. Clicks links, buttons, checkboxes, etc., by their numbers.
3. Fill form: browser_type. Writes text, compatible with React/Vue controlled components; the replace parameter will clear the field first before filling.
4. Press keys: browser_press. Sends keyboard events such as Enter, Tab, Escape, and arrow keys.
5. Scroll: browser_scroll. Scrolls the viewport, with directions including up, down, top, and bottom.
6. Page navigation: browser_navigate, browser_back, browser_forward, browser_reload. Jumps within the controlled tab while retaining login status.
7. Read text area: browser_get_text. Used for lazily loaded content or extracting partial text only.
8. Wait for stability: browser_wait. Detects whether page loading and rendering are stable.
There are several design boundaries explained in the “Why this design” section of the README:
- The operation targets a real browser, not a headless copy, so login status, sessions, and cookies are preserved.
- Pure text model interface: numbered controls, cross-snapshot stable IDs, delta updates, and sensitive value masking, so no visual capabilities are required.
- Password and payment card fields will always be displayed as ••••, and their field values will never leave the page.
- Remote connections use authenticated handshakes; privileged gateway methods reject non-loopback callers; the extension binds tools to a user-controlled tab.
Installation and Enablement¶
The installation command given on the community directory page is:
dsh plugin add github:Lum1104/dsh-browser
For reproducible installations, the directory page recommends pinning the commit hash:
dsh plugin add github:Lum1104/dsh-browser#commit
Replace commit with the actual commit hash. The directory page also reminds users that the plugin runs with the permissions of the current dsh process and may execute code during installation; you should inspect the source code repository and license before installing.
This repository includes both the bridge plugin and the Chrome extension. The recommended full installation method from the README is to run the official scripts/install.sh, which will build the bridge plugin, register it to the local web profile, then build and export the Chrome extension. Prerequisites include Node.js ^22.19 or >=24, Corepack/pnpm, and Google Chrome. All required @deepseek-ai packages are on the public npm registry, and no npm token is needed for installation.
The recommended command does not require prior cloning:
curl -fsSL https://raw.githubusercontent.com/Lum1104/dsh-browser/refs/heads/main/scripts/install.sh | bash
The remote installer will download main to ~/.dsh/dsh-browser, install fixed version dependencies according to the lockfile, build the bridge plugin and register it to the local web profile, then copy the extension to ~/.dsh/browser-extension, and finally attempt to open chrome://extensions. Enable developer mode on the extension management page, and load ~/.dsh/browser-extension — do not load the source code directory extensions/dsh-browser/ in the repository.
Before downloading and executing scripts from the internet, it is recommended to first visit the same URL to review the script content. The installer will call curl, tar, rsync, and pnpm; if these commands are missing on your machine, the script will exit with an error.
Developers can also clone the repository first and run the same installer from within the repository. This mode uses the current branch and will not download or overwrite source code:
git clone https://github.com/Lum1104/dsh-browser.git
cd dsh-browser
./scripts/install.sh
The installer writes the bridge bundle into the local web profile, and dsh only loads the profile on startup. If dsh was running before installation, you must restart it after installation, otherwise the sidebar will always show “Not connected” even if the extension has loaded successfully.
Typical Usage¶
After the hosted installation is complete, you can start using the fixed dsh version in the repository:
cd ~/.dsh/dsh-browser && pnpm start
If you installed by cloning the repository, run pnpm start from the repository root instead. You can also directly run the public version on npm:
npx @deepseek-ai/dsh web
Both startup methods will load the same browser bundle from the local web profile. The default port is 3080; if it is occupied, you can change the port, for example:
npx @deepseek-ai/dsh web --port 3081
After the DeepSeek whale icon appears in the toolbar, click it to open the sidebar. When using locally, the extension will automatically discover dsh by requesting /ext/bridge-config, and loopback connections do not require a bridge token. Only when deploying remotely with --host 0.0.0.0 do you need to fill in the address and bridge token in the sidebar settings. This token is a runtime security credential and has nothing to do with npm login.
To start using, follow the third step in the README:
1. Open any regular http:// or https:// page.
2. Click the whale icon in the toolbar and wait until the sidebar shows “Connected”.
3. Chat directly, or first click “Read Page”. The model will receive structured text and a numbered control list, and subsequent clicks and inputs will use the numbers.
4. Even if the page was opened before the extension was installed or reloaded, the content script will be automatically injected on the first operation, and you do not need to refresh the page first.
Built-in or protected pages such as chrome:// and the Chrome Web Store cannot have extension scripts injected, so they cannot be read or operated on.
You do not need to reinstall the extension for daily use afterwards — just start dsh. To update the hosted installation, run the above curl command again; to update a cloned installation, pull or switch to the target version and then run ./scripts/install.sh. Then go to chrome://extensions and click Reload for “dsh Browser Helper”, and reopen the sidebar. If dsh web is running, you must also restart it so that it reloads the updated web profile.
If the sidebar always shows “Not connected”, the README provides three troubleshooting steps:
- Confirm that the local dsh web process is running, with the default address being http://127.0.0.1:3080.
- Open http://127.0.0.1:3080/ext/bridge-config in your browser, which should return JSON similar to {"wsUrl":"ws://127.0.0.1:3080/ext/bridge"}. If a web page is returned instead of JSON, it means the current process has not loaded the bridge yet. Restart dsh and refresh the page again.
- The extension will automatically detect ports 3080, 3081, and 3090. If dsh is running on a different port or you used --host 0.0.0.0, fill in the address and bridge token in the sidebar settings.
Applicable Scenarios and Notes¶
This tool is suitable for users who are already using the DeepSeek Harness Web UI and want their agents to operate “the currently logged-in page”. Typical use cases include clicking buttons, filling forms, and following page jumps in a logged-in background system, without wanting to migrate the session to another headless browser setup. It does not replace general-purpose headless browser automation frameworks, nor does it handle pages that require screenshots or visual positioning.
There are several things you should know before using.
The plugin runs with the permissions of the current dsh process. The directory page states that it may execute code during installation, so you should read the source code and MIT license at https://github.com/Lum1104/dsh-browser before installing. DeepSeek Harness is still in developer preview, and the README notes that you may need to synchronously adjust dependencies and APIs during upgrades.
The security model is defined in the “Security” section of the repository, and only a few key points are excerpted here: the bridge path is outside the /api trust boundary and comes with bearer token authentication; privileged gateway methods such as settings.*, credentials.*, and host.open* reject all non-loopback sources; the model-facing pipeline uses pure text and does not pass screenshots, and password and card number values are not transmitted back. The helper will bind to the active tab when it starts working; after the user manually switches tabs, subsequent browser operations will pause, and the sidebar will ask whether to continue with the original page or follow the new one — the extension will not silently rebind or switch the page you are viewing. Webpage text will be marked as untrusted input. The reading mode defaults to “Auto Share”, but can also be changed to ask every time or completely disable reading; the read page text will be sent to the currently selected model. Clicks, inputs, key presses, navigation, history jumps, and refreshes default to fail-close and must be approved by the user; explicit cross-domain browser_navigate and history jumps to unknown targets will prompt for confirmation again.
Do not mistake the dsh-browser package on npm for this project. The Chrome extension should load ~/.dsh/browser-extension, not the source code directory.
Summary¶
dsh-browser connects DeepSeek Harness to a real Chrome tab: the page is converted into a numbered list, and the model operates via the numbers without relying on vision or spinning up a separate headless browser. The installation entry on the directory page is dsh plugin add github:Lum1104/dsh-browser; to install both the bridge plugin and the Chrome extension, running scripts/install.sh as per the repository README is the more complete approach.
Directory page: https://deepseek-harness-plugin.com/en-US/plugins/dsh-browser/
GitHub: https://github.com/Lum1104/dsh-browser
DeepSeek Harness official repository: https://github.com/deepseek-ai/deepseek-harness