DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

@logictan/dsh-browser-agent

Browser Agent

DSH browser agent: a dynamic operation+target decision loop. TypeSafe picks the action, this plugin executes it over CDP against the user's own Chrome. DSH 浏览器 Agent 子插件。

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add @logictan/dsh-browser-agent@0.2.6
READMECompatibilityVersions

Compatibility and provenance

Browser Agent is published as @logictan/dsh-browser-agent and currently resolves to version 0.2.6. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
npm
Registry updated
11/4/2026

Versions

0.2.6stable
10/27/2026
0.2.5stable
10/27/2026
0.2.4stable
10/18/2026
Show 4 more versionsCollapse versions
0.2.3stable
10/17/2026
0.2.2stable
10/8/2026
0.2.1stable
10/2/2026
0.2.0stable
9/22/2026

Related plugins

Loading related plugins…

Latest
0.2.6
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
97.6 kB
Files
16
Surface
web
License
MIT
Source
npm
Weekly downloads
421
View source ↗Project homepage ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in search-research.

Free Searchdsh-free-searchFree web search for DeepSeek Harness: 27 engines (Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl/Parallel/You.com keyless; Zhihu global/site via MCP and Perplexity/SerpBase/DeepSeek (official + native tools/search)/Baidu/Kimi/Aliyun/DoubaArisdsh-arisARIS research-workflow skills as a DeepSeek Harness bundle: 82 skills plus cross-model adversarial review through Codex.Dejadsh-dejadeja-vu memory for DeepSeek Harness: the session history of forty-two other coding agents, searchable and recalled before each step — a local index, no LLM.Builtin Browserdsh-builtin-browserShared real browser plugin for DeepSeek Harness: install-and-use — a visible native browser the human can take over, driven by the agent over CDP. DOM-level interaction (React/Vue safe), per-task session isolation, cookie persistence (dsh_browser_auth), C

README

@logictan/dsh-browser-agent

A DSH browser agent that drives your own Chrome over CDP. Each page observation builds an indexed table of the visible controls; one TypeSafe /v1/systemone request decides both the operation (CLICK / TYPE_TEXT / SELECT / PRESS_KEY / SCROLL_UP / SCROLL_DOWN / WAIT / DONE / BLOCKED) and the target element index; only TYPE_TEXT asks a second model for the field value, and that model comes from DSH's own ctx.llm service rather than a second key.

TYPE_TEXT inserts through the keyboard rather than assigning element.value: React and Vue track the value property, so an assignment updates their tracker and the input event they then see is discarded as a no-op — the field stays empty however convincing the trace looks. PRESS_KEY is the keyboard companion: a filled form still has to be submitted, and an open suggestion list still has to be accepted, and neither is reachable by clicking.

A <select> is one target carrying its options as data, and the value to set is a second question — "set Country to France" is one action with a parameter, not one action per country. Emitting an action per option also made the option count compete with every real control for the observer's action budget: two 160-option dropdowns consumed it entirely and left CLICK with zero targets, so the Search button was not in the element table at all.

Why it connects instead of launching

Launching a browser cannot carry your login state. The browser-use provider's launch mode hard-codes --isolated, whose documented meaning is keep the browser profile in memory, do not save it to disk. Attaching to an already-running Chrome is the only shape that uses a profile that persists.

macOS Chrome refuses --remote-debugging-port on the default profile (DevTools remote debugging requires a non-default data directory), so the supported shape is a dedicated --user-data-dir profile:

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
  --remote-debugging-port=9222 \
  --user-data-dir="$HOME/.dsh/chrome-agent-profile"

Log in once in that window; the login survives restarts because the profile is on disk. The profile does not travel with config sync — logging in is a per-device, one-time step.

The plugin never closes that browser. It disconnects the CDP session when a run ends, so your window and tabs are left exactly as they were.

A run also never drives one of your tabs. It opens a page of its own and closes it when the run ends, because a run navigates the page it drives and there is no reliable way to ask the browser which tab you are looking at: Playwright's connection turns on focus emulation, which makes every tab report document.visibilityState === 'visible' (measured on a real profile — three tabs, one active, all three read visible).

Settings

Settings → Plugins → browser-agent → configuration:

FieldMeaning
TypeSafe keynot a config field — a credential (BROWSER_AGENT_TYPESAFE_KEY); see below
TypeSafe endpointdefaults to https://api.typesafe.ai/v1/systemone
TypeSafe modeldefaults to jev-latest
CDP endpointdefaults to http://127.0.0.1:9222
Max stepsbrowser actions per run; defaults to 60
Text provider / model / reasoning effortroute for the TYPE_TEXT field-value call, chosen from the live model catalog. All empty = the session's own current route; with no session route either, a TYPE_TEXT decision fails the run with a settings hint instead of being recorded as a failed step.

The TypeSafe key is a credential, entered once per device in the same card under TypeSafe key. It lives in $DSH_HOME/.credentials.yaml as BROWSER_AGENT_TYPESAFE_KEY and is never read back into the card. Storing it as a config field would defeat that: a config value is only redacted from settings reads, while the plaintext still sits in cordis.patch.yml, which the config sync exports verbatim.

Tool

browser_agent({ url, goal }) navigates to url, runs the decision loop until DONE/BLOCKED or a cap is reached, and returns a structured trace.

Scope

v1 covers common HTML/ARIA controls, single-tab, single-frame pages. Iframes, shadow roots, canvas, file uploads, nested scrolling, pop-ups and screenshots are out of scope.