🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

浏览器代理 j62268781-alt/dsh-agent-browser

DeepSeek Harness
j62268781-alt12 天前有提交已提供中文文档扫描:含敏感能力

面向 DeepSeek Harness 的浏览器自动化插件:把 agent-browserRust +…

30.3/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add j62268781-alt/dsh-agent-browser
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · browser
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 18 处,展示前 18 条)
  • 读取本地文件
    bench/analyze.mjs:46
    const data = JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    bench/cap.mjs:110
    mkdirSync(dirname(out), { recursive: true })
  • 写入本地文件
    bench/cap.mjs:111
    writeFileSync(out, JSON.stringify({ describe, url, caps, samples, rows }, null, 1))
  • 读取本地文件
    bench/report.mjs:19
    const data = JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    bench/run.mjs:295
    mkdirSync(dirname(out), { recursive: true })
  • 写入本地文件
    bench/run.mjs:296
    writeFileSync(out, JSON.stringify({ summary, navSummary, initialStability, describe, argv: process.argv.slice(2), records }, null, 1))
  • 读取本地文件
    client/esbuild.config.mjs:16
    const PKG = JSON.parse(await readFile(new URL('../package.json', import.meta.url), 'utf8'))
  • 读取本地文件
    src/cli.ts:169
    if (name.includes('/')) return existsSync(name) ? name : undefined
  • 读取本地文件
    src/cli.ts:174
    if (statSync(candidate).isFile()) return candidate
  • 读取本地文件
    src/cli.ts:188
    return existsSync('/lib/ld-musl-x86_64.so.1') || existsSync('/lib/ld-musl-aarch64.so.1')
  • 读取本地文件
    src/cli.ts:215
    return existsSync(join(dir, native)) ? native : 'agent-browser-win32-x64.exe'
  • 读取本地文件
    src/cli.ts:228
    return candidate !== undefined && existsSync(candidate) ? candidate : undefined
  • 执行外部命令来自配置/变量
    src/cli.ts:358
    const child = spawn(this.command, [...this.options.globalArgs, ...args], {
  • 执行外部命令来自配置/变量
    src/env.ts:31
    const child = spawn(command, [...args], { stdio: ['ignore', 'pipe', 'pipe'], env: process.env })
  • 读取本地文件
    src/env.ts:70
    if (existsSync(candidate)) return candidate
  • 读取本地文件
    src/index.ts:378
    const found = candidates.find((candidate) => existsSync(candidate))
  • 读取本地文件
    src/skill.ts:50
    if (!existsSync(file)) throw new Error(`内置 skill 缺失:${file}(打包时把 skills/ 带上)`)
  • 读取本地文件
    src/skill.ts:51
    const { fields, body } = parseSkillFile(readFileSync(file, 'utf8'))
扫描于 2026/11/3(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/dsh-typert-protocol@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DSH 插件,用于浏览器自动化:收窄 agent-browser 命令行(Rust + CDP)工具面,提取页内 DOM 候选,提供设置界面,并运行低成本 Jev + 上游 LLM 有界决策循环。

README

由 DeepSeek 最新模型翻译生成
dsh-agent-browser 面向 DeepSeek Harness 的浏览器自动化插件:把 agent-browser(Rust + CDP)接成一组窄工具 + 一个设置页,可选再挂一个目标循环,由 dsh-judgment 判断。 语言: 中文(本文件) · English 为什么不是 MCP:agent-browser mcp 会把几十个原子动作全局塞进模型上下文,而它结构上做不到插件内部的有界循环、每步新鲜度门控、动作审计与设置页。形态取舍的完整论证见 DESIGN.md §1.2。 参考的三个同类项目(jev-browser-use / jkudish/jev-browser / forvela/jev-agent-browser)也都不走"把动作墙交给模型"这条路——它们的形态是一个 delegate 工具 + 代码拥有循环。
展开完整文档(README 剩余 1 节)
dsh-agent-browser

面向 DeepSeek Harness 的浏览器自动化插件:把 agent-browser(Rust + CDP)接成一组窄工具 + 一个设置页,可选再挂一个目标循环,由 dsh-judgment 判断。

语言: 中文(本文件) · English

为什么不是 MCP:agent-browser mcp 会把几十个原子动作全局塞进模型上下文,而它结构上做不到插件内部的有界循环、每步新鲜度门控、动作审计与设置页。形态取舍的完整论证见 DESIGN.md §1.2。
参考的三个同类项目(jev-browser-use / jkudish/jev-browser / forvela/jev-agent-browser)也都不走"把动作墙交给模型"这条路——它们的形态是一个 delegate 工具 + 代码拥有循环。

状态(诚实清单)

| 项 | 状态 |
| 设置页(安装自检 summary + 平铺行流 + 开关/输入 + 打开配置文件) | ✅ 已实现 |
| 安装自检:两项(CLI / Chrome)+ 帮忙装 CLI | ✅ 已实现(host @Remote probe/installCli + 客户端手写 contribution,pnpm verify:remote 交叉验证) |
| 内置 skill(skills/agent-browser/:核心命令 + 5 份 references) | ✅ 已实现(ctx.skills.register() 运行时注册,装插件即得) |
| browser_snapshot / browser_act / browser_read / browser_session / browser_screenshot | ✅ 已实现 |
| browser_raw 逃生舱(白名单) | ✅ 已实现,默认关 |
| browser_run(决策循环,judge = ctx.judgment) | ✅ 已实现并完成 39 任务真机基准验证(支持页面内抽取、inputs 一次填全、subgoals 阶段编排,以及 Jev + 上游 LLM 低成本早停交回闭环) |
| CLI 版本要求 >=0.38.2(不设上限) | ✅ 已实现(0.38.2 实测基准;0.39.1 复验通过) |
| 动作审计落盘 / 配额可视化 | ⏳ 见 DESIGN.md §8(M3) |

实测:pnpm probe 会 spawn 真浏览器跑一遍(版本下限 → snapshot refs → 按 ref 点击 → 陈旧 ref 被拒)。
注意探针只覆盖"元素被删除且没有同名幸存"这一类;同名顺位回退是 CLI 的已知行为(DESIGN §1.1 表格 #9),探针不假装测它。

安装

dsh plugin --profile desktop add https://github.com/j62268781-alt/dsh-agent-browser.git

装完在 设置 → 浏览器 里配置。本插件零 MCP:只在 enabled 为真时注册工具;关掉「浏览器功能」= 一个工具都不进模型上下文。

agent-browser 需要单独装:

brew install agent-browser # 或 npm i -g agent-browser
agent-browser --version # 需要 >= 0.38.2(更新版本也可用)

工具面(窄核心 + 逃生舱)

| 工具 | 作用 |
| browser_snapshot | 无障碍树 + @eN refs,返回 origin / refs / digest。先快照再动作。 |
| browser_act | 唯一变更入口,一次一个动作:click/fill/type/press/select/scroll/hover/check/uncheck/upload/dblclick/focus。可带 expectUrl / expectName 做执行前的新鲜度断言。 |
| browser_read | 只读:read <url>(markdown / llms.txt 协商)或读元素的 text/html/value/attr/title/url/count。 |
| browser_session | open / close / tabs。固定使用命名会话,不劫持别的 agent 或人类开着的窗口。 |
| browser_screenshot | 截图(可关)。 |
| browser_raw | 逃生舱:白名单内的其它 CLI 子命令(get / find / network / storage …);禁 mcp/chat/install/plugin/connect/auth/--cdp/--profile。默认关。 |
| browser_run | 决策开才注册:一句话 goal → 插件内部有界循环 → trace + handoff。 |

关于 ref

ref 大部分时候是元素身份绑定的(0.38.2 与 0.39.1 实测):页面变了、元素没了、换页了,旧 ref 会给 Unknown ref / Could not locate element with role=… name=…。
但有一个例外:目标元素消失、页面上还有同名元素时,解析会退回 role+name 的序位匹配, 静默点到隔壁那个同名元素(如列表里连排的 Delete)。所以本插件不设 snapshot_id 强制门控,而是靠每步重取 snapshot 消除决策窗口;browser_act 的 expectUrl / expectName 是额外保险——同名列表/批量操作用得上,建议显式给。详见 DESIGN.md §1.1(含复现命令)。

内置 skill

插件自带一份与已装 CLI 版本对齐的核心 skill(skills/agent-browser/):
- SKILL.md(130 行):核心循环、两个最容易做错的点(会话隔离、等待)、定位优先级、可见性/复用登录态、安全护栏、排障表;
- references/:commands.md(34KB,需要时才读)、snapshot-refs.md、session-management.md、authentication.md、trust-boundaries.md。

插件启动时用 ctx.skills.register() 把它注册成运行时技能(resourceBase 指向 references 目录,模型可按需读取绝对路径),并在末尾追加一段插件补充(工具名、browser_run、references 路径)——SKILL.md 原文逐字不改,避免两份真相漂移。

为什么不直接用官方全量技能:agent-browser skills get core --full 与 9 个专门技能(electron / slack / dogfood …)很全,但不适合作为常驻目录;需要时仍可用 agent-browser skills get <name> 现拉。

ctx.skills 是可选服务:宿主没装 dsh-skill 时跳过注册,插件其余部分照常工作。

安装自检(设置页顶部 summary)

进「设置 → 浏览器」自动跑一次,只有两项(路径之类的细节不显示)。按钮只有两个状态:环境可用 → 灰色「已安装」(不可点);环境不可用(或还没检查过)→ 「检查安装」(可点,修完能重新确认)。

| 项 | 通过 | 不通过 |
| agent-browser | 已安装 0.39.1(任何 ≥ 0.38.2 的版本) | 本机没安装 + 修法,并出现 [安装] 按钮(Homebrew 优先,否则 npm i -g;点了才跑) |
| Chrome | 已就绪(Google Chrome 155) | 没找到 + 下载入口(Chrome 是必须项:没有它页面根本驱动不了) |

两项都过 → 卡片是绿的(浏览器环境就绪);任一项不过 → 红,直接摊开原因与修法。

Chrome 为什么不帮忙装:brew install --cask google-chrome 在 macOS 上要管理员密码,一个后台进程挂着等密码是最糟的交互。CLI 可以(纯用户态安装),Chrome 只给命令与链接。

Chrome 的判定优先用 CLI 自己的 agent-browser doctor --quick --json(约 0.5s,它认得环境变量、engine 与自定义路径);CLI 不可用时退回文件系统 / PATH 探测,消息写「没找到」而不是「没有」。

性能(实测,2026-10 · agent-browser 0.38.2)

| 被测 | 均值 |
| spawn /bin/echo(spawn 下限) | 1.2ms |
| spawn bash -c …(bash 路线) | 1.4ms ← 比直接 spawn 更贵 |
| agent-browser --version(PATH 上的 Node 包装脚本) | 57.3ms |
| 原生二进制 --version / get title / snapshot -i / click @e2 | 3.1 / 3.7 / 5.1 / 16.8ms |

所以:

- 插件比"用 bash 调 CLI"更省,不是更贵:bash 是 shell + CLI 两次 spawn,插件是直接一次。
- PATH 上的 agent-browser 是 Node 包装脚本(Homebrew / npx 都如此),每次调用白付一份 Node 启动。插件默认自动解析到同目录的原生二进制(agent-browser-<platform>-<arch>),砍掉 11–15 倍启动开销;要指定别的就配 browser.executablePath(带 / 时原样使用)。brew upgrade 后旧路径失效会自动重解析重试一次。
- 决策循环里 CLI 不是瓶颈:一步 ≈ 22ms,而一次 Jev 判断是 500ms 量级;真正的收益是N 步压进 1 个宿主轮次,而不是省那几毫秒。

pnpm probe 会打印实际使用的命令与每条命令耗时,数字可复跑。

决策(browser_run:Jev + 上游 LLM 低成本闭环)

「决策」开启后多一个 browser_run(goal, inputs?, subgoals?, allowIrreversible?):插件内部跑一个有界循环——

每步页面内抽取候选(extract.ts 一次 eval 拿齐可见元素/状态/附近上下文 + 正文/标题/URL;必要时回退 a11y 树) → 确定性完成门(URL 新增段命中 / 弹层关闭消失 / 加购变 Remove / 下拉或勾选态全部达成 / 填值生效) → ctx.judgment.ask(state, { action: choice, goal_done, done_change, stuck, irreversible, login, page_error }) → 停止门在动作之前判定(goal_done + 独立 confirm / likely_done / page_error / needs_login / stuck) → 首选动作无效时:仅当次优候选概率 p ≥ 0.25 才允许换路,否则立即早停交回上游 LLM(绝不盲点跳走) → 执行一个动作(或按调用方 inputs 直接填/选/勾)→ 记 history/diff → 下一步

核心纪律:

- 确定性门控优先,判断只做排序:域名白名单、不可逆拦截(needs_confirmation)、状态守卫(已勾选不再反点)、Enter 消费防重填等全部由代码确定性执行。
- Jev + 上游 LLM 低成本闭环:Jev 擅长的确定性步骤,在单次工具调用内快速跑完;遇到复杂自定义组件,或置信不足(ambiguous / no_progress / blocked / page_error / input_required),立即早停,并在返回值里附带前 5 个可操作 candidates(含 ref 句柄)与 pageText 摘要——上游主模型无需再调一次 browser_snapshot,可直接用 browser_act 一步接管。
- 文字/密钥不猜:调用方可由 inputs 一次传入(敏感字段自动脱敏为 ●●●,绝不出境);缺值时以 input_required 交回宿主。
- 结束语是 needs_verification,不是「已完成」——最终校验留给宿主(39 任务真机基准 false-done = 0)。
- 降级必须显式:没有 ctx.judgment、用途名未配置、密钥缺失、配额耗尽 → 类型化失败 + 明确文案,绝不静默退回主模型假装在决策。

判断走 dsh-judgment:在 设置 → 决策 里建一条连接,把用途名 browser.action 指向它(默认值就是这个)。换厂商/模型/密钥只改那里,不动本插件。

开发

pnpm install
pnpm build # host(tsc) + 客户端(esbuild → lib/client.js)
pnpm test # 注册面 + 自检 + 页面渲染 + 纯逻辑 + 决策循环回归(177 项单测,离线可跑)
pnpm typecheck
pnpm verify:remote # Remote 通路交叉验证(17 项):host SRC fallback ↔ 手写 contribution
pnpm verify:served # 问运行中的应用:boot 数据里有没有本插件的客户端半(7 项)
pnpm probe # 真 CLI 探针(会开浏览器,结束前自动关掉自己的会话)
pnpm bench:tasks # 真机任务集基准(支持 --tier offline,base,hard,guard --connection TypeSafe --repeat 3)

目录结构:

src/
├── config.ts 配置(schemastery;开关决定工具注册) ├── cli.ts agent-browser CLI 薄封装:spawn · JSON 信封 · 版本下限 · 原生二进制解析 ├── extract.ts 页面内 DOM 候选抽取(一次 eval 拿候选 + 状态 + 上下文 near + 正文/标题/URL) ├── env.ts 环境探测(Chrome / 安装计划 / 跑命令)——自检那两项的本机侧 ├── skill.ts 内置 skill 的加载与注册 ├── index.ts 入口:Service 类(工具注册 + @Remote probe 自检) ├── task.ts 向后兼容导出入口(re-export ./task/index.js) └── task/ 按核心职责拆分的决策循环模块 ├── types.ts 公共类型、阈值常量(含 ALTERNATE_MIN_PROBABILITY = 0.25)与交回提示契约 ├── utils.ts 纯工具函数(哈希、语义签名、快照 diff、键名/词元解析、截断) ├── candidates.ts 候选生成、目标相关性排序与特殊动作面(悬停/拖拽/按键)前置注入 ├── gates.ts 确定性门控与字段状态核对(多子句勾选守卫、Enter 消费追踪、多跳 URL 证据、次优筛选) ├── judge.ts Jev 协议问题构造、二阶段下拉选值、独立完成确认与分布缩容重采 ├── actions.ts 浏览器动作执行(fill/select/click/hover/drag/press)与异步加载等待 └── loop.ts 有界决策主循环(runTask)、有序子目标编排(runSubgoals)与上游 LLM 交回封装 client/ 设置页(统一 JSX,esbuild 打成 window.__ModuleLoader__ 单文件) skills/ 随包发布的核心 skill(SKILL.md + references/) bench/ 39 任务真机基准套件(tasks.mjs · run.mjs · score.mjs · nav.mjs 状态隔离与导航诊断) tests/ 注册面 · 自检 · 抽取与门控纯逻辑 · 决策循环与基准单测(共 177 项) scripts/ probe.mjs(真 CLI)· verify-remote.mjs(Remote 通路)· e2e-run.mjs

⚠️ 新增/客户端改动的生效方式(实测):dsh plugin add 之后 app 会热组合新的 bundle (无需重启:boot 数据里立刻有本插件,skill 目录里也出现了 agent-browser)。
但 host 半是 Node 模块,改完 lib/index.js 要重启 DSH 才会换上新代码;客户端半重新构建即生效。
配置项写的是 volatile 字段:不会重建 entry,工具注册由服务监听 loader/volatile-update 自己重做,所以改完即时生效、也不需要重启。

⚠️ 兼容性:DSH 的 boot 会把插件 peerDependencies 里 @deepseek-ai/dsh-* 的版本范围拿去和「dsh 运行时版本」比对,不满足就整个跳过这个 bundle(日志一行 dsh: skipping profile bundle)。
所以这里用的是跨版本区间(>=0.2.0-rc.2 <0.3.0),不要精确钉死某个 dsh 版本。
当前验证过的运行时:dsh 0.2.1-rc.1 / cordis 4.0.5 / schemastery 3.18.5 / dsh-tools 0.2.1-rc.1 / dsh-typert-protocol 0.2.1-rc.1。

决策循环(browser_run)的设计参考了三家实现,并做了实测校准: fan-out 五问里的停止门放在动作之前;goal_done 只认「页面可见正文」这一个字段;重复且无效的动作从概率分布里换次优候选;两次无效即停;状态超 12k 截断并显式标注;结束时只给 needs_verification + next(「怎么验」),从不宣布完成。
真机端到端:pnpm e2e(真 Chrome + 真 Jev,两步点击后被独立确认为 SUCCESS);真机测试(真的 dsh 进程 + 智能体自己调工具):pnpm live --run "<任务>";每步观测走命令行的 batch(树+正文+标题一次进程,省 ~114ms);耗时基准(决策 vs 原子工具,hao123 首页):pnpm bench;真实网站手试:pnpm try --url <url> --goal "<目标>" [--expect <正则>] (实测 jevusers.com → Browser → jev-browser-use,2 步完成,见 docs/try-jevusers.png)。

⚠️ 「决策」依赖 dsh-judgment(依赖在 package.json 里显式声明:peerDependencies.dsh-judgment
+ peerDependenciesMeta.dsh-judgment.optional = true,所以不装也能用插件,只是不能开决策)。
设置页的判定是四态的——ready(可开启)/ checking(自检未返回)/ unknown(自检失败或 host 半版本不匹配)/ missing(宿主明确说没有 ctx.judgment)。只有 ready 才允许开启:其余三态开关一律置灰并说明原因;点开启时还会向宿主 checkJudgment() 现问一次(不信任缓存),
依赖不在就不写配置。宿主侧也有兜底:apply() 发现 tools.decision 开着但依赖缺失只警告、不注册工具。

许可

MIT
预览分享卡片长什么样 ↓j62268781-alt/dsh-agent-browser
分享 · DeepSeek Harness Hub
j62268781-alt/dsh-agent-browser

面向 DeepSeek Harness 的浏览器自动化插件:把 agent-browserRust +…

这是你的仓库?认领条目

回到顶部