DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Browser Agent — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
B

@try-works/dsh-browser-agent

Browser Agent

DeepSeek Harness 捆绑包:一个供智能体使用的 Chrome 浏览器(browser_goto / browser_evaluate / browser_screenshot 及另外 12 个工具),以及一个无需密钥的网络搜索层(browser_search / browser_fetch / Reddit 工具,移植自 pi-lynx),并在 DSH Web GUI 内提供实时双向窗格。浏览器引擎是

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:try-works/dsh-browser-agent#b92c4575c5c9c443606ee6b2ced08657155e0607
README兼容性版本

说明

DeepSeek Harness 捆绑包:一个供智能体使用的 Chrome 浏览器(browser_goto / browser_evaluate / browser_screenshot 及另外 12 个工具),以及一个无需密钥的网络搜索层(browser_search / browser_fetch / Reddit 工具,移植自 pi-lynx),并在 DSH Web GUI 内提供实时双向窗格。浏览器引擎是 zenbu-labs/terminal-browser 的分支版本,其中 React Ink 终端 UI 被 DSH 工具界面和网页窗格替代。

兼容性与来源证明

Browser Agent 以 @try-works/dsh-browser-agent 发布,当前版本为 0.7.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/8/27

版本

0.7.0stable
2026/8/27
0.6.0stable
2026/8/23
0.5.0stable
2026/8/23
查看其余 2 个版本收起版本
0.4.0stable
2026/8/23
0.2.6stable
2026/8/23

相关插件

正在加载相关插件…

最新版
0.7.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
ISC
发布源
github
GitHub
★ 2
周下载
0
最近提交
2026/9/1
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 search-research 分类下经过校验的插件。

Browser Skill Dsh Plugin@wxg-prc-cpg/browser-skill-dsh-plugin向模型提供 BrowserSkill 浏览器自动化(browser_* 工具)的 DeepSeek Harness 工具插件Weknora@wxg-prc-cpg/dsh-weknora适用于 DeepSeek Harness (dsh) 的 WeKnora 知识检索工具:通过自有知识库进行语义搜索、文档阅读以及 RAG/代理回答。Free Searchdsh-free-searchDeepSeek Harness 的免费网页搜索:13 个引擎(Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl 无需密钥;Parallel/Perplexity/SerpBase/DeepSeek 需要密钥),支持时间筛选、平台搜索和 web_fetch,并提供网页设置界面。Find Plugindsh-find-plugin在代理中查找 DeepSeek Harness 插件——实时搜索 GitHub 上的 dsh-plugin 主题,并按星标数排序。

README

@try-works/dsh-browser-agent

A DeepSeek Harness (DSH) bundle that gives agents a real Chrome browser, a no-key net search tier, and a live window onto the browsing. One shared page, fifteen browser tools, six net tools, and a collapsible browser pane docked inside the DSH Web GUI that streams that page and takes real mouse/keyboard input.

It is a fork of zenbu-labs/terminal-browser with the terminal UI replaced by a DSH tool surface and a web pane — the same idea (pixels out, synthetic input in), built on the harness's own plugin, module, and slot systems. The net search tier ports the no-key engine chain of dabito/pi-lynx (MIT).

What this plugin is and does

  • Six net tools for agents — browser_fetch, browser_search, browser_search_github, browser_search_wikipedia, browser_reddit_search, browser_reddit_thread — no-key, plain-HTTP search and fetch (DuckDuckGo Lite → Brave HTML chain with automatic fallback, plus Reddit access). The cheapest routes for research; degrade to the browser tools when a wall appears.
  • Fifteen browser tools — navigation, structured DOM interaction, history, capture, accessibility, and tabs — all driving one shared Chrome page that persists across calls, so an agent can navigate, read, interact, and capture.
  • A live pane for humans — a right-docked, collapsible, resizable panel in the DSH Web GUI showing that same page in real time. You can watch the agent browse and take over yourself: click, drag, scroll, type, or use the address bar. Everything lands in the page through the Chrome DevTools Protocol.
  • Five packaged skills — bundled guidance (plus a search runbook) that teaches agents how to find web sources, navigate, automate pages, verify renders, and manage tabs through the tools.
  • URL normalization — tools and address bar accept URLs, hostnames, localhost:port, existing local file paths, or plain search text.

Chrome runs as a separate OS process launched by the plugin (puppeteer-core), so a browser crash can never take the harness down — the next call simply relaunches.

Install

Prerequisites: a DSH deployment with a profile (the Web surface is needed for the pane; the tools work on any surface).

# install from the npm registry into a profile (the DSH CLI forwards to pnpm
# in the profile directory, then reconciles the profile's plugin bundles)
dsh plugin --profile web add @try-works/dsh-browser-agent

The plugin's own bundle patch mounts the row automatically — no manual composition edit is needed. Then restart dsh web and hard-refresh the GUI tab (Ctrl+F5) so the client pane bundle is fetched. The three browser_* tools appear in the agent's tool set, and the pane docks on the right edge of the GUI.

Fresh releases and the supply-chain policy — DSH profiles enable pnpm's minimumReleaseAge check. A version published less than 24 hours ago is rejected unless it is listed in the profile's pnpm-workspace.yaml:

minimumReleaseAgeExclude:
  - '@try-works/dsh-browser-agent@0.2.0||0.2.1'

One rule per package name — multiple versions go in a single || union on the same line; separate lines for the same package shadow each other and only the first applies.

Local development

dsh plugin --profile web add link:D:/path/to/dsh-browser-agent

Configuration

All fields are optional (schemastery defaults fill them). Override via the profile's cordis.patch.yml:

- id: dsh-browser-agent
  config:
    chromePath: 'C:\Program Files\Google\Chrome\Application\chrome.exe'
    viewport: { width: 1920, height: 1080 }
    navTimeoutMs: 45000
    scriptTimeoutMs: 20000
    timeoutMs: 60000
    headed: false
    pane: true
FieldDefaultPurpose
chromePathsystem Chrome on WindowsAbsolute path to a Chrome/Chromium executable.
viewport1920 × 1080Default viewport for new pages (and the headed window size).
navTimeoutMs45000page.goto navigation timeout.
scriptTimeoutMs20000page.setDefaultTimeout (script/evaluate timeout).
timeoutMs60000Per-tool execution timeout.
headedfalseLaunch a visible Chrome window instead of headless. The window is the same shared page the pane shows — two views of one browser. Needs a desktop session.
panetrueServe the browser pane in the Web GUI. Headless/TUI compositions have no web server, so the pane never mounts there regardless.
userDataDir'' (temp profile)Chrome profile directory. Empty = a fresh temporary profile per launch. Set an absolute path to persist cookies, logins, and storage across launches (note: session cookies without an expiry are still session-only).
connectUrl'' (disabled)CDP browser URL for My Chrome mode. When set, the pane's mode toggle can connect to a Chrome you launched with chrome.exe --remote-debugging-port=9222 --user-data-dir=<non-default dir>, adopting its real tabs, logins, and fingerprint — the mode that passes bot-protection walls (e.g. Cloudflare Turnstile). Launch flags are ignored in connect mode.
stealthfalseStealth plugin mode: launch our own Chrome without --enable-automation (so navigator.webdriver is false), headed, AutomationControlled disabled, persistent profile. Much better odds against bot walls than plain puppeteer, though not your personal fingerprint — for the sure thing use My Chrome mode.
searchEngines

The net tools (no-key search & fetch)

The net tier is a port of the pi-lynx engine chain (browser_search = DuckDuckGo Lite → Brave HTML with automatic fallback), plus a plain-HTTP page fetch and Reddit access — no Chrome, no API key, no JS rendering. These are the cheapest routes for research; the browser-search skill's triage puts them first and degrades to the browser tools when a datacenter IP gets throttled.

ToolWhat it does
browser_fetchFetch a URL as readable text over plain HTTP: {url, finalUrl, status, text, truncated, links}.
browser_searchSearch the web: ranked {title, snippet, domain, url} rows plus an instant answer when the engine has one. site: "github" | "wikipedia" | <domain>, engine: "auto" | "ddg" | "brave", maxResults.
browser_search_githubbrowser_search restricted to github.com — repos, issues, discussions.
browser_search_wikipediabrowser_search restricted to en.wikipedia.org.
browser_reddit_searchReddit post search (old.reddit HTML first, the public JSON search as fallback): title, subreddit, author, score, comments, permalink.
browser_reddit_threadA Reddit thread via its public .json endpoint: post fields plus the top comments.

The browser tools

ToolWhat it does
browser_gotoNavigate the shared page and return {url, finalUrl, status, title, text, links} — up to 6000 chars of extracted heading/paragraph/list text and 25 links.
browser_evaluateRun a JavaScript expression in page context (document, window, DOM available) and return the JSON-serializable result.
browser_screenshotCapture the current page as a PNG/JPEG data URL ({dataUrl, mime, bytes}); fullPage for the whole page height.
browser_clickClick the first element matching a CSS selector; returns the clicked tag/text or ok: false with a message.
browser_typeType text into an input/textarea/select with real key events (React-safe); returns the field value.
browser_readInner text of a selector (default: whole body), up to 6000 chars, with the match count.
browser_waitWait until a selector appears (async content done), then return its text.
browser_back / browser_forward / browser_reloadHistory navigation of the active tab.
browser_a11yCompact accessibility tree (role/name/value, up to 400 nodes) — what screen readers consume.
browser_tabsList tabs (index, url, title, active); the other tools act on the active tab.
browser_tab_open / browser_tab_switch / browser_tab_closeManage tabs; popups and target=_blank links open as new tabs.

The page is shared and persistent: browser_goto to a site, browser_evaluate to interact with its DOM, browser_screenshot to see it — all the same tab.

URL handling

browser_goto and the pane's address bar accept (matching the terminal-browser reference semantics):

  • full URLs (https://…, data:, mailto:, about:, view-source:, …)
  • host-like input (example.com/docs, localhost:5173 — http:// for localhost/127.0.0.1, https:// otherwise)
  • existing absolute or ~-expanded local paths (opened as file://)
  • anything else → a Google search

The browser pane

Expanded, the pane docks full-height on the right edge (like a mirrored sidebar); collapsed, it shrinks to a thin vertical rail with a toggle. Its left edge is a drag handle — drag to resize (320 px to 85 % of the window), the width persists across reloads, and the whole GUI reflows around it. The header carries back / forward / reload buttons next to the address bar, and the tab strip ends with a browser-mode toggle.

Browser modes

The Plugin / My Chrome toggle in the tab strip switches which browser the agent drives — live, at any time:

  • Plugin — the instance this plugin launches (headless by default, with the configured viewport/profile).
  • My Chrome — a Chrome you launched yourself with debugging enabled, connected over CDP. Chrome only opens the debug port on a non-default profile, so launch it with a dedicated profile directory (e.g. the desktop shortcut: chrome.exe --remote-debugging-port=9222 --user-data-dir=C:\Users\you\.dsh\chrome-debug-profile), set connectUrl, and toggle to My Chrome. Log in once inside that Chrome — logins persist there — and it runs alongside your normal Chrome. Because the plugin never touches its identity (no automation flags, no UA/viewport changes), bot-protection walls such as Cloudflare Turnstile see a real session. Switching back only detaches; your Chrome and its tabs are never closed by the plugin. (Profiles cannot be copied between directories: Chrome's App-Bound Encryption drops cookies moved to a different profile path — the dedicated profile is the one to log into.)

The pane is a real two-way remote:

  • Frames out — the pane subscribes to GET /browser-pane/stream (SSE). The host half drives Chrome's Page.startScreencast (JPEG frames on visual change only — no screenshot polling) and pushes each frame with the page URL. The screencast follows its subscribers: the first client starts it, the last one stops it, and late subscribers get the current state and last frame replayed immediately.
  • Input in — pointer and keyboard events post to /browser-pane/input and land in the page through the CDP Input domain (Input.dispatchMouseEvent / Input.dispatchKeyEvent). Fidelity matches the terminal-browser reference: double/triple-click counting, modifier bitmasks (Shift/Ctrl/Cmd/Alt on mouse and keys), fractional wheel accumulation with line-mode detent scaling, held-key release on focus loss, and focus emulation while the pane owns the page.
  • Address bar — POST /browser-pane/goto navigates the shared page.
RoutePurpose
GET /browser-pane/streamSSE frame + state feed (frame / state events).
POST /browser-pane/inputSynthetic input: {type: mouse-move | mouse-down | mouse-up | wheel | key-down | key-up, …}.
POST /browser-pane/gotoNavigate: {url}.
POST /browser-pane/modeSwitch browser mode: {mode: 'own' | 'connect'}.

How it works

One package, two halves, both mounted from a single composition row:

Host half (Node process) — runs the browser, the tools, the skill, and the pane server:

  • A BrowserRuntime owns one lazily launched Chrome and a tab session: any number of tabs, one active. On a crash or disconnect the cached handles are cleared and the next call relaunches.
  • All fifteen tools register on the host tools registry; the five packaged skills register on skills, each with its bundled skills/<name>/ directory as its resource base.
  • The pane server registers the three routes above on the shared web server (ctx.webServer), only when one exists. Request bodies are parsed by schemastery schemas at the route boundary.
  • Tabs: popups and target=_blank links open as new tabs (the terminal-browser tabs-as-popups model) and the pane's tab strip mirrors the session, so the pane, the tools, and any headed window never disagree about which page is live. Blank targets are never closed (a page under creation is blank too); foreign targets are adopted once they carry a real URL.
  • Background throttling is disabled so frames keep flowing when Chrome is occluded.

Client half (browser bundle) — the pane UI:

  • package.json declares dsh.client (platform: "web"), and the built bundle is exported at exports["./client"]. The DSH client-modules host scans enabled entries for dsh.client packages, serves the bundle at /plugins/@try-works/dsh-browser-agent/client.js, and the client kernel adopts it as a cordis plugin — no extra composition row required.
  • The pane registers into the frame-wide shell.overlay slot declared by the GUI layout, docked to the right edge. The bundle is written with React.createElement (no JSX); react itself is a shell-seeded platform module, so the bundle carries no framework bytes.

Lifecycle — registration is wrapped in a ctx.effect generator (the dsh-recursive-mode pattern): unloading the plugin unregisters the tools and skill, tears down the pane routes and the screencast, releases held keys, and closes Chrome.

The bundled skills

The bundle registers five packaged skills on ctx.skills (the dsh-plugin packaged-skill standard: each skills/<name>/SKILL.md ships in the package and registers with a directory resourceBase, so relative references resolve against the bundle's copy):

SkillTeaches the agent
browser-searchFinding and reading web sources across both tiers — the net tools first (cheapest), then web_search, then the browser tools — with route triage and a full runbook (references/search-engine-access-guide.md — search-engine captchas/403s, SearXNG fallback, Wayback Machine, site search, and API routes).
browser-navigationMoving around the shared page: URL forms (URLs, hostnames, localhost ports, file paths, search text), reading the browser_goto summary, redirects/statuses/timeouts, and the single shared-page model.
browser-interactionDOM automation through browser_evaluate: reading state, clicking, typing, form filling, scrolling, waiting for async content, JSON-safe results, and batching reads into one evaluate.
browser-visual-checkVerifying renders with browser_screenshot (viewport/full page, PNG/JPEG) and keeping the shared page presentable for the human watching the live pane.
browser-multitabWorking with several pages at once: tab tools, which tab the other tools act on, popups-as-tabs, and tab discipline.

Development

pnpm install     # links the type-only harness devDependencies
pnpm build       # tsc declarations + tsdown: lib/index.js (host) and lib/client.js (client)
pnpm typecheck   # tsc --noEmit
pnpm test        # offline parser/runtime tests (node --import tsx --test test/net.test.ts)

The net tier is TDD'd: test/net.test.ts runs offline against committed fixtures in test/fixtures/, and test/net.live.test.ts exercises the real engines when opted in ($env:DSH_BROWSER_LIVE = '1'; node --import tsx --test test/net.live.test.ts in PowerShell). The live suite tolerates the documented walls — DDG Lite throttling and Reddit 403s from datacenter IPs are accepted as environment states, not failures; the parsers are proven by the offline fixtures.

prepublishOnly runs pnpm build, so npm publish always ships fresh artifacts.

License

ISC — see LICENSE. This package derives from zenbu-labs/terminal-browser (ISC); see NOTICE.

'ddg,brave'
Engine chain for the net search tools, tried in order: ddg (DuckDuckGo Lite) and brave (Brave HTML).
siteSearchIntervalMs3000Minimum delay between consecutive site-filtered net searches (rate-limit politeness).
fallbackOnEmptytrueContinue with the next engine when one returns no results.
fetchTimeoutMs15000Per-request timeout for the net tools (fetch/search/reddit).