Back to home

Miiiuser

dsh-browser-agent

Browser automation + vision for text-only LLMs — standalone CLI + DeepSeek Harness skill + Cordis plugin. Drive a real browser with Playwright and give text-only models "eyes" via GLM / OpenAI-compatible vision.

Stars
1
Language
JavaScript
Created
Aug 15, 2026
Updated
Aug 15, 2026

Introduction

dsh-browser-agent

给**纯文本模型(DeepSeek 等)**用的浏览器自动化 + 视觉识别。

Playwright 驱动真实浏览器(Edge / Chrome / Chromium),再通过视觉模型(默认智谱 GLM-4V,也支持任意 OpenAI 兼容 / 本地模型)把截图转成文字,给文本模型装上"眼睛"。

提供两种形态

  • 独立 CLI —— browser-agent
  • DeepSeek Harness Cordis 插件 —— 注册一组 browser_* 原生工具,会话内直接调用

不需要 Python,只需 Node 18+。

为什么需要它

browser-use 这类工具要求一个多模态 LLM 当大脑。如果你用的是纯文本模型(DeepSeek 等),它看不到截图,就无法自己驱动浏览器循环。

本项目把职责按正确的方式拆开:

纯文本模型 (DeepSeek)  ← 大脑:读文字、做决策
        ▲
        │  屏幕的 JSON 文字描述
        ▼
视觉模型 (GLM-4V)      ← 眼睛:截图 → 文字
        ▲
        │  截图
        ▼
Playwright 浏览器      ← 手:打开 / 点击 / 输入 / 滚动 / 提取

文本模型始终是决策者,视觉模型只负责"把像素翻译成文字"。

特性

  • 常驻浏览器桥 —— 一个长驻浏览器走本地 HTTP API(登录态跨命令保持)。
  • 文本优先定位 —— snapshot 返回元素清单(ref、tag、type、id、placeholder、text),多数操作不需要视觉。
  • 按需视觉 —— see / vision 把截图或图片转成结构化描述。
  • 三种视觉通道 —— glm(免费 GLM-4.6V-Flash / GLM-4.1V-Thinking-Flash)、custom(任意 OpenAI 兼容端点)、local(Ollama / LM Studio / llama.cpp)。
  • 自动识别浏览器 —— 在 Windows / macOS / Linux 上找 Edge / Chrome / Chromium。
  • 附加模式(attach) —— 通过 CDP 驱动已运行的浏览器(适合禁止启动浏览器的沙箱)。
  • 结果缓存 —— 按"图片哈希 + prompt + 模型"缓存视觉结果。

快速开始(CLI)

# 1. 安装
npm install        # 唯一依赖 playwright-core(无需下载浏览器)

# 2. 启动桥(在终端 / 后台)
node cli.mjs start
#    → "bridge ready on http://127.0.0.1:9333"

# 3. 驱动它(在任意另一个终端)
node cli.mjs open "https://example.com"
node cli.mjs snapshot
node cli.mjs screenshot ./shot.png
node cli.mjs see "描述这个页面和可点击元素"

或链接成全局命令:

npm link           # 暴露 browser-agent
browser-agent start
browser-agent open https://example.com

DeepSeek Harness Cordis 插件

plugins/cordis/ 里是一个 Cordis Host 插件,注册 10 个 browser_* 模型工具,让 DSH 会话原生拥有浏览器控制与视觉能力(无需再手敲 CLI)。

工具一览:

工具作用
browser_status桥是否运行、当前页面 URL/标题
browser_open打开 URL
browser_snapshot元素清单(ref 编号)
browser_text页面可见文本
browser_screenshot截图保存 PNG
browser_click按 ref / 文本点击
browser_type点击并输入
browser_eval页面内执行 JS
browser_see截图 + 视觉描述(GLM)
browser_vision描述本地图片

插件提供两种安装方式,详见 plugins/cordis/README.md

  • 正式包 + agent preset(常驻,推荐):把 dsh-browser-agent-cordis物理复制${DSH_HOME}/profiles/node_modules/,再用 agentPresets.copy('standard', 'browser-agent') 复制一个 preset 并加一行引用(name: 'dsh-browser-agent-cordis' + config.cliPath)。之后开会话选该 preset 即自带 10 个工具,免去每次 cordis_define
  • 动态插件(单会话,临时):把 plugins/cordis/host.js 的函数体用 cordis_define 填进 code.hostcordis_run 激活。

插件工具内部通过 shell 服务调用 cli.mjs,因此桥必须先启动node cli.mjs startscripts/start.ps1)。在沙箱里启动桥若报 spawn EPERM,用提权(danger-full-access)启动,或用 attach 模式(见下)。

命令参考

服务端

命令说明
start运行桥(阻塞,后台启动)
stop停止桥

控制

命令说明
ping桥是否存活
open <url>导航
url / title当前 URL / 标题
snapshot带 ref 编号的元素清单
text / html页面文本 / HTML
screenshot <path> [-full]截图
click <ref>按 ref(来自 snapshot)或文本点击
type <ref> <text>点击后输入
press <key>按键(如 Enter
scroll <down|up|bottom|top>滚动
eval <js>执行 JS 并返回结果
wait <ms>等待
back / forward / tabs / newtab导航

视觉

命令说明
see <prompt...>截图页面并描述
vision <image> <prompt...>描述本地图片

两者都支持 --provider glm|custom|local--thinking--model <m>--api-key <k>

视觉配置

GLM(默认,免费)

# Windows (PowerShell)
$env:GLM_API_KEY = "你的key"
# macOS / Linux
export GLM_API_KEY="你的key"

https://open.bigmodel.cn 获取 key。默认模型 glm-4.6v-flash(免费、快);加 --thinkingglm-4.1v-thinking-flash(复杂推理)。429 时自动降级到 thinking 模型。

GLM_API_KEY 只在 Windows 用户注册表里、没进进程环境(比如 DSH 启动早于 key 设置),也可以把 key 写进项目根目录的 .glm-key 文件——vlm.mjs 会作为兜底读取(该文件已在 .gitignore 里,不会提交)。

Custom(任意 OpenAI 兼容端点)

export VLM_PROVIDER=custom
export VLM_BASE_URL=https://你的代理/v1
export VLM_MODEL=你的视觉模型
export VLM_API_KEY=你的key

Local(Ollama / LM Studio / llama.cpp)

export VLM_PROVIDER=local
# 可选:export VLM_LOCAL_MODEL=qwen2.5-vl:3b

按顺序探测 127.0.0.1:11434(Ollama)、:1234(LM Studio)、:8080(llama.cpp)。

环境变量

变量默认含义
BA_PORT9333桥监听端口
BA_HEADLESS01 = 无头
BA_BROWSERautoedge / chrome / chromium / 完整路径
BA_PROFILE~/.dsh-browser-agent/profile持久用户数据目录
BA_CDP_URL(空)附加到已运行的浏览器而非启动新浏览器
BA_BRIDGE_URLhttp://127.0.0.1:<BA_PORT>CLI 寻找桥的地址
VLM_PROVIDERglmglm / custom / local
GLM_API_KEY(空)GLM 通道 key
VLM_BASE_URL / VLM_MODEL / VLM_API_KEY(空)自定义通道
VLM_LOCAL_MODELqwen2.5-vl:3b本地通道模型

典型循环

open 页面 → snapshot 读元素 →(需要看才 see)→ click/type 操作 → snapshot 观察 → ... 直到完成

DeepSeek Harness 集成注意点

SKILL.md(中文技能说明)。两个 DSH 特有注意点:

  1. DSH 沙箱可能禁止启动浏览器(spawn EPERM)。用提权启动桥,自己用 --remote-debugging-port=9222 启动浏览器并设 BA_CDP_URL=http://127.0.0.1:9222(attach 模式无需提权)。
  2. PowerShell 的 HTTPS 可能报 SEC_E_NO_CREDENTIALS;视觉客户端走 Node 的 TLS,用 node cli.mjs vision ...,别用 Invoke-RestMethod

原理

cli.mjs (客户端) ── HTTP POST {op,...} ──▶ bridge.mjs (常驻 Playwright 浏览器)
                                              │ 截图
                                              ▼
                                          vlm.mjs ── HTTPS ──▶ GLM / custom / local
                                              │
                                              ▼
                                          JSON 描述 → 交回文本模型推理

目录结构

dsh-browser-agent/
├── cli.mjs                 # 统一 CLI 入口
├── src/
│   ├── bridge.mjs          # 常驻浏览器桥
│   ├── client.mjs          # HTTP 客户端
│   └── vlm.mjs             # 视觉调用器
├── plugins/
│   └── cordis/             # DSH Cordis 插件(正式包 index.js + 动态源码 host.js + README)
├── scripts/                # 启动脚本(start.ps1 / start.sh)
├── examples/               # 示例页面
├── SKILL.md                # DSH 技能说明(中文)
└── README.md / README.en.md

常见问题

  • bridge not running —— 先 node cli.mjs start
  • spawn EPERM —— 环境禁止启动浏览器,用 attach 模式(BA_CDP_URL)或给进程授权。
  • no browser found —— 装 Edge/Chrome/Chromium,或 BA_BROWSER 设为完整路径。
  • browser has been closed —— 可见浏览器窗口被关掉了,桥会自动退出,重新 start 即可。
  • 视觉 401/403 —— 检查 GLM_API_KEY(或 VLM_API_KEY)。

许可证

MIT