前言¶
在 DeepSeek Harness(DSH)里给 Agent 挂上 Playwright 类浏览器能力时,常见做法是往 profile 里加 provider 行。工具会出现在几乎所有会话里,模型一旦调用就会真的开浏览器,缺少「先问用户再开」的环节。若把 provider 塞进预设,又会撞上 DSH 对 browserUse 隔离域的限制,或出现多 Session 争用同一 provider 的错误。
dsh-browser-mode 是社区维护的 DSH bundle:提供「浏览器操作」会话预设、可在运行时切换的浏览器来源,以及门禁逻辑——除浏览器模式会话外,其它会话在用户明确同意前无法成功调用浏览器工具。下面按安装、用法和注意点说明。
这是什么¶
- 名称与维护者:GitHub 仓库 Shad0wwa1ker/dsh-browser-mode,维护者 Shad0wwa1ker。
- 社区分类:在 SkillHub 插件目录 中归类为 admin-security。
- 许可证:MIT(见仓库 README)。
- 定位:DeepSeek Harness 插件包——可见浏览器预设 + 浏览器来源管理 + 按会话授权的门禁。README 写明在 DSH
0.2.1-rc.2(Windows 11 + Edge)上实测通过;package.json当前版本为1.7.1。
DSH 生态强调「一切皆插件」;SkillHub 等目录是社区站点,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
可见浏览器与来源切换¶
- 默认
headless: false,窗口可见,便于观察或人工接管。 - 浏览器来源可在运行时切换,默认 Microsoft Edge;也可选 Playwright 内置 Chromium,或通过 CDP 连接已启动的浏览器。
- Playwright MCP provider 由包内
browser-source行挂载,不需要在 profile 里再单独写一条 provider 行(与旧版browser-use-playwright-mcp互斥,升级时需删掉旧行)。
两种使用入口¶
- 浏览器操作会话:新建会话时模式选「浏览器操作」,该会话内可直接使用
browser_navigate等工具,不再弹授权。 - 当前会话申请:在普通会话里让模型用浏览器时,首次调用会被门禁拦住;模型可走
browser_access,界面弹出「允许 / 不允许」。允许后仅对当前 Agent 放行,授权存在插件内存,重启或重开会话需重新同意。
门禁行为¶
- 对非
mcp__playwright-mcp__前缀的工具不处理;browser_access本身不拦。 - 预设为 browser 的 Agent、或已被用户授权的 Agent,调用浏览器工具时放行。
- 其它情况返回中文说明与后续建议,而不是单纯的
permission denied。 - 读不到预设、问答服务不可用或 provider 未加载时,按「不可用浏览器」处理。
失败与安全边界¶
插件以当前 DSH 进程权限运行浏览器与 MCP;安装前应自行查看源码与 MIT 许可证。授权不落盘、不跨会话;子 Agent 无法完成授权问答,须在主会话操作。
安装与启用¶
一键安装¶
在 DSH 插件管理器的「包名或地址」中粘贴:
github:Shad0wwa1ker/dsh-browser-mode
等价工具调用:
plugin_manager install_bundle target:github:Shad0wwa1ker/dsh-browser-mode
安装会写入 profile 依赖 "@local/dsh-browser-mode": "github:Shad0wwa1ker/dsh-browser-mode",并启用包内三行:preset-browser、browser-source、browser-gate。
首次使用前配置¶
在 $DSH_PROFILE_DIR/cordis.patch.yml 中保留共享的 browserUse 注册表行(若已存在则跳过):
- insert:
- id: browser-use
name: "@deepseek-ai/dsh-browser-use"
从 1.5.1 或更早版本升级时,请删除 browser-use-playwright-mcp 那一行(保留 browser-use)。一个进程里只能有一个 provider。
确认安装¶
执行:
plugin_manager list_plugins
include:preset-browser、include:browser-source、include:browser-gate 均应 enabled: true、fiberPhase: "active"。
典型用法¶
方式一:整段网页任务¶
新建会话,模式选「浏览器操作」。会话内模型直接调用浏览器相关工具,无需再问用户。
方式二:普通会话里临时用浏览器¶
对模型说「用浏览器打开这个页面并填好」。第一次调用浏览器工具会被拦下,随后出现授权对话框,文案类似:
允许使用浏览器
是否允许我在这个会话里打开浏览器?用途:……
[允许] [不允许]
点「允许」后本会话后续浏览器调用放行;点「不允许」时模型应改用 web_search、web_fetch、文件与命令行等能力。
切换浏览器来源¶
在插件设置页可选来源、填 CDP 地址、改 Edge 路径、切换无头模式;与 browser_source 工具读写同一份配置。
让模型切换时,会调用例如:
browser_source({ source: "builtin" })
browser_source({ source: "endpoint", endpoint: "http://127.0.0.1:9222" })
不带参数时只回显当前配置。切换会重挂 provider,已打开会话里的浏览器工具会失效,建议新开「浏览器操作」会话再打开页面。
source |
行为 |
|---|---|
edge |
启动本机 Edge(找不到时退回 Playwright 内置 Chromium) |
builtin |
启动 Playwright 自带 Chromium |
endpoint |
连接已开调试端口的浏览器;独占,多会话不能共用 |
连接本机 Edge 调试端示例(README 中的 PowerShell):
& "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --remote-debugging-port=9222 --user-data-dir="$env:TEMP\edge-cdp"
运行时选择会写入 $DSH_PROFILE_DIR/browser-source.json(Windows 上为 %USERPROFILE%\.dsh\profiles\<profile>\browser-source.json)。删除该文件即恢复默认 Edge。也可在 cordis.patch.yml 里覆盖 browser-source 的 config 字段。
适用场景与注意¶
适合谁:需要在 DSH 里做可见浏览器自动化、又希望默认会话不会静默开浏览器的开发者或日常用户;整页抓取、填表、点按等适合「浏览器操作」会话,偶发需求适合 browser_access。
务必知晓:
- 普通会话里仍可能看到
mcp__playwright-mcp__*工具名,只是未授权时调用会被门禁拒绝(tools.restrict()无法隐藏 provider 自注册的工具,插件采用tools.guard()在调用管线拒绝)。 - 浏览器页面与登录态仅在单个会话内保留;切换来源不保留已打开页面。
- 会话开始后不能切换预设;临时用浏览器应走授权,而不是指望改模式。
- 依赖
@deepseek-ai/dsh-experimental-browser-use-playwright-mcp等包,DSH 大版本升级后需对照package.json与 README 兼容性说明,并重跑 README 中的验证清单。
README 提供的快速验证包括:普通会话打开网址应被拒且不弹窗;同意后应出现可见窗口;浏览器操作会话应直接可用;切换 builtin 后下一次打开页面应换 Chromium。
结尾¶
dsh-browser-mode 把「专用浏览器会话」「运行时可选 Edge / 内置 Chromium / CDP」和「按会话征求同意」收进一个 bundle,缓解 profile 层单 provider 与多会话安全之间的矛盾。安装与细节以仓库 README 为准。