DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

@logictan/dsh-browser-agent

Browser Agent

DSH 浏览器代理:动态的操作+目标决策循环。TypeSafe 选择操作,此插件通过 CDP 在用户自己的 Chrome 上执行该操作。DSH 浏览器 Agent 子插件。

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

npx -y @deepseek-ai/dsh plugin --profile web add @logictan/dsh-browser-agent@0.2.6
README兼容性版本

兼容性与来源证明

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

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/11/4

版本

0.2.6stable
2026/10/27
0.2.5stable
2026/10/27
0.2.4stable
2026/10/18
查看其余 4 个版本收起版本
0.2.3stable
2026/10/17
0.2.2stable
2026/10/8
0.2.1stable
2026/10/2
0.2.0stable
2026/9/22

相关插件

正在加载相关插件…

最新版
0.2.6
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
97.6 kB
文件数
16
Surface
web
许可证
MIT
发布源
npm
周下载
421
查看源码 ↗项目主页 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Free Searchdsh-free-searchDeepSeek Harness 的免费网页搜索:27 个引擎(Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl/Parallel/You.com 无需密钥;通过 MCP 支持 Zhihu 全局/站内搜索,以及 Perplexity/SerpBase/DeepSeek(官方 + 原生工具/搜索)/Baidu/Kimi/Aliyun/Douba)Arisdsh-arisARIS research-workflow 技能作为 DeepSeek Harness 捆绑包:包含 82 项技能,以及通过 Codex 进行的跨模型对抗性审查。Dejadsh-dejaDeepSeek Harness 的 deja-vu 记忆:四十二个其他编码代理的会话历史,可搜索并在每一步之前召回——本地索引,无需 LLM。Builtin Browserdsh-builtin-browserDeepSeek Harness 的共享真实浏览器插件:安装即用——一个可见的原生浏览器,用户可以接管,并由智能体通过 CDP 驱动。支持 DOM 级交互(兼容 React/Vue)、按任务隔离会话、Cookie 持久化(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.