拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenRig 如何内置浏览器自动化技能:agent-browser 的 vendored-supplemented 集成模式解析

OpenRig 如何内置浏览器自动化技能:agent-browser 的 vendored-supplemented 集成模式解析
  • 人工智能
  • AI Agent
  • 多智能体
  • Agent 编排
  • 代码智能体
  • CLI

【免费下载链接】openrig

Build your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.

项目地址:https://gitcode.com/GitHub_Trending/op/openrig
点击查看免费下载

OpenRig 通过add-supplementary-files(追加补充文件)这一可复用的 vendoring 模式,将 Vercel 的 agent-browser 浏览器自动化 CLI 技能内置到自己的技能体系中,让 OpenRig 拓扑派发出来的任意 Agent 都能直接驱动真实浏览器(快照、表单填充、截图、抓取、Web 应用测试),而无需运维人员额外安装浏览器自动化技能。本指南以 OPENRIG.md 为骨架,结合仓库内的 SKILL.md 与 LOCAL-INSIGHTS.md 完整内容,系统讲解:agent-browser 技能在 OpenRig 中的定位、add-supplementary-files模式的具体实现(如何在不污染上游内容的前提下追加本地实战洞察)、该技能暴露的命令面与实战用法,以及技能与上游的再同步流程。

读完本文,你将掌握:OpenRig 内置浏览器自动化技能的文件结构与管理方式、agent-browser 从导航/快照/交互/再快照到登录态持久化、视觉回归、并行会话、iOS 模拟器、配置优先级、ref 生命周期等完整操作面,以及如何把上游技能与本地补充文件"结对"维护而不产生分叉。

一、背景:OpenRig 为什么要内置 agent-browser

OpenRig 的核心定位是"构建你自己的 Agent 网络"——从 Claude Code、Codex 和 Pi 构建出拥有角色、共享上下文和自有工作的持久化团队(见 README.md 项目描述)。在这样的拓扑里,不同角色(如 QA、验证、测试)的 Agent 经常需要与真实网页交互:填写表单、点击按钮、截图、抓取数据、测试 Web 应用。

  • OPENRIG.md 明确指出:OpenRig 内置agent-browser,使任何由 OpenRig 拓扑派发的 Agent都能驱动真实浏览器(快照、表单填充、截图、抓取、Web 应用测试),运维人员无需为每个 Agent 单独安装浏览器自动化技能。它被任何"角色包含 Web 工作"的 Agent 配置所引用。
  • 这一声明有具体的仓库证据支撑:
    • 在 packages/daemon/specs/agents/shared/agent.yaml 中,agent-browser被注册为共享技能:- id: agent-browser/path: skills/process/agent-browser;
    • 在 packages/daemon/specs/agents/development/qa/agent.yaml 中,QA 角色的技能列表明确包含agent-browser(与test-driven-development、systematic-debugging、verification-before-completion等测试类技能并列);
    • 在 packages/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md 中,agent-browser被列为"从 Agent 驱动浏览器(截图/录屏)"的代表技能。

也就是说,agent-browser不是仓库里孤立的第三方文件,而是 OpenRig 技能体系中的一个正式成员,属于 process 类技能,面向"角色包含 Web 工作"的 Agent 开放。

二、技能文件布局:OPENRIG.md 与它的两个"搭档"

agent-browser 技能在仓库中有两处镜像:

  • 主镜像(specs 下发路径):packages/daemon/specs/agents/shared/skills/process/agent-browser/
  • 规范镜像(canonical 路径):skills/_canonical/process/agent-browser/

两个目录下的文件结构完全一致,均包含三个文件:

文件角色
SKILL.md上游技能主体,定义name、description、allowed-tools、metadata及完整命令用法
LOCAL-INSIGHTS.mdOpenRig 本地补充文件,约 189 行,记录实战中踩过的坑与命令兼容性矩阵
OPENRIG.md本文档,即"OpenRig 与这个技能的关系声明",记录来源、改动与再同步纪律

OPENRIG.md 的开头 Frontmatter 与 Origin 小节给出了这份关系声明的关键元数据:

skill: agent-browser openrig-relationship: vendored-supplemented
  • Upstream(上游):Vercel agent-browser CLI(其上游仓库位于 https://github.com/vercel/agent-browser)
  • Vendoring pattern(内置模式):add-supplementary-files
  • Last upstream check(上次上游核查):2026-05-13(初始关系声明)

这些信息同时以结构化元数据形式写进了 SKILL.md 的 frontmatter:metadata.openrig.vendored_from、vendoring_pattern: add-supplementary-files、last_upstream_check,以及divergence_notes(分歧说明)——后者明确指向"请阅读 OPENRIG.md 获取完整关系说明"。

2.1 为什么是 vendored-supplemented

OpenRig 对第三方技能的处置不是"改造成自己的"也不是"原样照搬",而是vendored-supplemented(内置 + 补充):上游 SKILL.md 结构原样保留,OpenRig 只追加一个伴随文件来承载本地实战洞察,从而不污染上游内容。这份 OPENRIG.md 就是该关系的正式声明文件。

三、add-supplementary-files:OpenRig 内置第三方技能的标准模式

OPENRIG.md 明确指出:agent-browser 是add-supplementary-files(追加补充文件)模式的典型(canonical)示例,该模式在writing-skills-for-openrigSKILL.md 的 "Vendored skills" 一节中有系统论述。核心思想是:上游技能保持结构完整,OpenRig 增加一个伴随文件,用于捕获本地使用洞察,而不污染上游内容。

3.1 两个具体的表面改动

Surface改了什么为什么
SKILL.md正文在末尾附近新增一小节 "## Local Dev Insights",内含**IMPORTANT:** Read LOCAL-INSIGHTS.md指针没有这个指针,加载技能的 Agent 就不会知道伴随文件存在;指针是补充模式可被发现所需的唯一结构性改动
LOCAL-INSIGHTS.md(新的同级文件,约 189 行)实战验证过的坑、命令兼容性矩阵、以及上游技能未覆盖的修正例如:并非所有get子命令都接受@refs——get text @e1可以工作,但get html @e1会静默失败。兼容性矩阵能把 Agent 从最常见的困惑类别中解救出来

3.2 补充文件为何是"承载负荷"的

OPENRIG.md 的 "Companion files" 一节强调:LOCAL-INSIGHTS.md是load-bearing(承载负荷)的补充内容——SKILL.md 正文明确把读者指向这里,获取上游技能未覆盖的实战坑。也就是说,它不是"可选附件",而是该技能在 OpenRig 环境中正确使用的必要组成部分。

四、SKILL.md:Agent 实际加载的技能主体

要理解 add-supplementary-files 模式中"上游内容保持结构完整"意味着什么,需要先看 SKILL.md 本身。它由三部分组成:frontmatter(技能元数据)、上游正文(完整命令面)、以及末尾追加的本地洞察指针。

4.1 Frontmatter:Agent 如何决定使用这个技能

name: agent-browser description: Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. allowed-tools: Bash(npx agent-browser:*), Bash(agent-browser:*)
  • description是技能的"触发条件清单":任何涉及打开网站、填表、点按钮、截图、抓取、测试 Web 应用、登录站点、自动化浏览器操作的需求,都应激活本技能;
  • allowed-tools限定了 Agent 只能通过Bash(npx agent-browser:*)和Bash(agent-browser:*)两种形式调用该技能;
  • metadata.openrig记录了 vendoring 来源、模式、上次核查时间与分歧说明。

4.2 核心工作流:导航 → 快照 → 交互 → 再快照

SKILL.md 定义的每一次浏览器自动化的标准流程:

  1. Navigate(导航):agent-browser open <url>
  2. Snapshot(快照):agent-browser snapshot -i(获取@e1、@e2等元素引用)
  3. Interact(交互):用引用执行点击、填充、选择
  4. Re-snapshot(再快照):导航或 DOM 变化后获取新的引用
agent-browser open https://example.com/form agent-browser snapshot -i # Output: @e1 [input type="email"], @e2 [input type="password"], @e3 [button] "Submit" agent-browser fill @e1 "user@example.com" agent-browser fill @e2 "password123" agent-browser click @e3 agent-browser wait --load networkidle agent-browser snapshot -i # Check result

4.3 命令链接(Command Chaining)

命令可以通过&&在单次 shell 调用中串联。浏览器通过后台守护进程在命令之间保持持久,因此串联比分开调用更安全高效:

# 一条命令内串联 open + wait + snapshot agent-browser open https://example.com && agent-browser wait --load networkidle && agent-browser snapshot -i # 串联多个交互 agent-browser fill @e1 "user@example.com" && agent-browser fill @e2 "password123" && agent-browser click @e3 # 导航并截图 agent-browser open https://example.com && agent-browser wait --load networkidle && agent-browser screenshot page.png

何时串联:不需要先读取中间命令的输出再继续时用&&(如 open + wait + screenshot);需要先解析输出再行动时分开运行(如先 snapshot 发现 refs,再基于 refs 交互)。

4.4 完整命令面

# 导航 agent-browser open <url> # 导航(别名:goto, navigate) agent-browser close # 关闭浏览器 # 快照 agent-browser snapshot -i # 交互元素 + refs(推荐) agent-browser snapshot -i -C # 含光标交互元素(带 onclick 的 div、cursor:pointer) agent-browser snapshot -s "#selector" # 限定 CSS 选择器范围 # 交互(使用 snapshot 得到的 @refs) agent-browser click @e1 # 点击元素 agent-browser click @e1 --new-tab # 点击并在新标签页打开 agent-browser fill @e2 "text" # 清空并输入文本 agent-browser type @e2 "text" # 不清空直接输入 agent-browser select @e1 "option" # 选择下拉选项 agent-browser check @e1 # 勾选复选框 agent-browser press Enter # 按键 agent-browser scroll down 500 # 滚动页面 # 获取信息 agent-browser get text @e1 # 获取元素文本 agent-browser get url # 获取当前 URL agent-browser get title # 获取页面标题 # 等待 agent-browser wait @e1 # 等待元素 agent-browser wait --load networkidle # 等待网络空闲 agent-browser wait --url "**/page" # 等待 URL 模式 agent-browser wait 2000 # 等待毫秒 # 捕获 agent-browser screenshot # 截图到临时目录 agent-browser screenshot --full # 整页截图 agent-browser screenshot --annotate # 带编号元素标签的标注截图 agent-browser pdf output.pdf # 保存为 PDF # 差异对比(比较页面状态) agent-browser diff snapshot # 当前 vs 上次快照 agent-browser diff snapshot --baseline before.txt # 当前 vs 已保存文件 agent-browser diff screenshot --baseline before.png # 视觉像素对比 agent-browser diff url <url1> <url2> # 比较两个页面 agent-browser diff url <url1> <url2> --wait-until networkidle # 自定义等待策略 agent-browser diff url <url1> <url2> --selector "#main" # 限定元素

4.5 常见模式

表单提交:

agent-browser open https://example.com/signup agent-browser snapshot -i agent-browser fill @e1 "Jane Doe" agent-browser fill @e2 "jane@example.com" agent-browser select @e3 "California" agent-browser check @e4 agent-browser click @e5 agent-browser wait --load networkidle

带状态持久化的认证:

# 登录一次并保存状态 agent-browser open https://app.example.com/login agent-browser snapshot -i agent-browser fill @e1 "$USERNAME" agent-browser fill @e2 "$PASSWORD" agent-browser click @e3 agent-browser wait --url "**/dashboard" agent-browser state save auth.json # 在后续会话中复用 agent-browser state load auth.json agent-browser open https://app.example.com/dashboard

会话持久化(跨浏览器重启自动保存/恢复 cookies 与 localStorage):

# 自动保存/恢复 cookies 和 localStorage(跨浏览器重启) agent-browser --session-name myapp open https://app.example.com/login # ... 登录流程 ... agent-browser close # 状态自动保存到 ~/.agent-browser/sessions/ # 下次自动加载状态 agent-browser --session-name myapp open https://app.example.com/dashboard # 加密静态存储 export AGENT_BROWSER_ENCRYPTION_KEY=$(openssl rand -hex 32) agent-browser --session-name secure open https://app.example.com # 管理已保存状态 agent-browser state list agent-browser state show myapp-default.json agent-browser state clear myapp agent-browser state clean --older-than 7

数据提取:

agent-browser open https://example.com/products agent-browser snapshot -i agent-browser get text @e5 # 获取特定元素文本 agent-browser get text body > page.txt # 获取整页文本 # 便于解析的 JSON 输出 agent-browser snapshot -i --json agent-browser get text @e1 --json

并行会话:

agent-browser --session site1 open https://site-a.com agent-browser --session site2 open https://site-b.com agent-browser --session site1 snapshot -i agent-browser --session site2 snapshot -i agent-browser session list

连接到现有 Chrome:

# 自动发现启用远程调试的 Chrome agent-browser --auto-connect open https://example.com agent-browser --auto-connect snapshot # 或用显式 CDP 端口 agent-browser --cdp 9222 snapshot

可视化浏览器(调试):

agent-browser --headed open https://example.com agent-browser highlight @e1 # 高亮元素 agent-browser record start demo.webm # 录制会话 agent-browser profiler start # 启动 Chrome DevTools 性能分析 agent-browser profiler stop trace.json # 停止并保存 profile(路径可选)

本地文件(PDF、HTML):

agent-browser --allow-file-access open file:///path/to/document.pdf agent-browser --allow-file-access open file:///path/to/page.html agent-browser screenshot output.png

iOS 模拟器(移动 Safari):

# 列出可用 iOS 模拟器 agent-browser device list # 在指定设备上启动 Safari agent-browser -p ios --device "iPhone 16 Pro" open https://example.com # 与桌面端相同的工作流:快照、交互、再快照 agent-browser -p ios snapshot -i agent-browser -p ios tap @e1 # 点击(click 的别名) agent-browser -p ios fill @e2 "text" agent-browser -p ios swipe up # 移动端手势 # 截图 agent-browser -p ios screenshot mobile.png # 关闭会话(关闭模拟器) agent-browser -p ios close

前置要求:macOS + Xcode、Appium(npm install -g appium && appium driver install xcuitest)。真机:支持预配置的物理 iOS 设备,使用--device "<UDID>",UDID 来自xcrun xctrace list devices。

4.6 差异对比(验证变更)

在操作后使用diff snapshot验证操作是否产生了预期效果,它比较当前可访问性树与会话中上次快照的差异:

# 典型工作流:snapshot -> action -> diff agent-browser snapshot -i # 建立基线快照 agent-browser click @e2 # 执行操作 agent-browser diff snapshot # 查看变化(自动对比上次快照)

用于视觉回归测试或监控:

# 保存基线截图,稍后对比 agent-browser screenshot baseline.png # ... 时间流逝或发生变更 ... agent-browser diff screenshot --baseline baseline.png # 比较 staging 与 production agent-browser diff url https://staging.example.com https://prod.example.com --screenshot

diff snapshot输出使用+表示新增、-表示删除,类似 git diff。diff screenshot生成差异图,变更像素以红色高亮,并给出不匹配百分比。

4.7 超时与慢页面

本地浏览器的默认 Playwright 超时是 60 秒。对慢网站或大页面,应使用显式等待而非依赖默认超时:

# 等待网络活动稳定(慢页面首选) agent-browser wait --load networkidle # 等待特定元素出现 agent-browser wait "#content" agent-browser wait @e1 # 等待特定 URL 模式(重定向后很有用) agent-browser wait --url "**/dashboard" # 等待 JavaScript 条件 agent-browser wait --fn "document.readyState === 'complete'" # 固定时长等待(毫秒,作为最后手段) agent-browser wait 5000

对持续缓慢的网站,open之后用wait --load networkidle确保页面完全加载后再快照。如果某个元素渲染慢,直接用wait <selector>或wait @ref等待它。

4.8 会话管理与清理

并发运行多个 Agent 或自动化任务时,务必使用命名会话避免冲突:

# 每个 Agent 一个隔离会话 agent-browser --session agent1 open site-a.com agent-browser --session agent2 open site-b.com # 查看活动会话 agent-browser session list

完成后务必关闭浏览器会话以避免进程泄漏:

agent-browser close # 关闭默认会话 agent-browser --session agent1 close # 关闭特定会话

如果之前的会话没有正常关闭,守护进程可能仍在运行。用agent-browser close在开始新工作前清理它。

4.9 Ref 生命周期(重要)

@e1、@e2等 refs 在页面变化时失效。以下情况后必须重新快照:

  • 点击导航类链接或按钮
  • 表单提交
  • 动态内容加载(下拉、模态框)
agent-browser click @e5 # 导航到新页面 agent-browser snapshot -i # 必须重新快照 agent-browser click @e1 # 使用新 refs

4.10 标注截图(视觉模式)

--annotate截图上会叠加交互元素的编号标签。每个标签[N]对应 ref@eN。它还会缓存 refs,无需单独快照即可立即交互:

agent-browser screenshot --annotate # 输出包含图片路径和图例: # [1] @e1 button "Submit" # [2] @e2 link "Home" # [3] @e3 textbox "Email" agent-browser click @e2 # 用标注截图中的 ref 点击

适用场景:页面有无标签的图标按钮或纯视觉元素;需要验证视觉布局或样式;存在 Canvas 或图表元素(对文本快照不可见);需要元素位置的空间推理。

4.11 语义定位器(refs 的替代方案)

refs 不可用或不稳定时,使用语义定位器:

agent-browser find text "Sign In" click agent-browser find label "Email" fill "user@test.com" agent-browser find role button click --name "Submit" agent-browser find placeholder "Search" type "query" agent-browser find testid "submit-btn" click

4.12 JavaScript 求值(eval)

用eval在浏览器上下文运行 JavaScript。Shell 引号可能破坏复杂表达式——用--stdin或-b规避:

# 简单表达式用普通引号即可 agent-browser eval 'document.title' agent-browser eval 'document.querySelectorAll("img").length' # 复杂 JS:用 --stdin + heredoc(推荐) agent-browser eval --stdin <<'EVALEOF' JSON.stringify( Array.from(document.querySelectorAll("img")) .filter(i => !i.alt) .map(i => ({ src: i.src.split("/").pop(), width: i.width })) ) EVALEOF # 替代方案:base64 编码(完全规避 shell 转义问题) agent-browser eval -b "$(echo -n 'Array.from(document.querySelectorAll("a")).map(a => a.href)' | base64)"

为什么重要:shell 处理命令时,内部双引号、!(历史展开)、反引号和$()都会在 JS 到达 agent-browser 之前破坏它。--stdin和-b完全绕过 shell 解释。

经验法则:单行、无嵌套引号 → 常规eval 'expression'(单引号)即可;嵌套引号、箭头函数、模板字符串或多行 → 用eval --stdin <<'EVALEOF';程序化/生成脚本 → 用eval -b配合 base64。

4.13 配置文件

在项目根目录创建agent-browser.json保存持久设置:

{ "headed": true, "proxy": "http://localhost:8080", "profile": "./browser-data" }

优先级(低到高):~/.agent-browser/config.json<./agent-browser.json< 环境变量 < CLI flags。用--config <path>或AGENT_BROWSER_CONFIG环境变量指定自定义配置文件(缺失/无效会报错退出)。所有 CLI 选项映射为 camelCase 键(如--executable-path→"executablePath")。布尔标志接受true/false值(如--headed false可覆盖配置)。用户与项目配置中的 extensions 是合并而非替换。

4.14 深潜文档与现成模板

SKILL.md 还列出了上游提供的深潜参考(references/*.md)与现成模板(templates/*.sh),以及其调用方式:

./templates/form-automation.sh https://example.com/form ./templates/authenticated-session.sh https://app.example.com/login ./templates/capture-workflow.sh https://example.com ./output

五、LOCAL-INSIGHTS.md:上游技能没覆盖的实战经验

add-supplementary-files 模式的另一半——也是该模式"价值增量"所在——是 LOCAL-INSIGHTS.md。文件开头声明:命令细节反映 v0.13.0 时代的用法,可能与已安装版本不同,使用前应核对当前 help 并验证目标操作——它不是当前浏览器或登录测试的收据。

5.1 命令兼容性矩阵(头号困惑源)

并非所有get子命令都接受 @refs。这是最常见的困惑来源:

命令@refsCSS 选择器备注
get text @e1YESYES两者都支持
get htmlNOYES用 refs 会静默失败
get boxNOYES返回{x, y, width, height}JSON
get stylesNOYES返回紧凑摘要(font, color, bg, border-radius)
get valueNOYES用于表单输入
get attrNOYES任意 HTML 属性
get countN/AYES返回元素数量
get urlN/AN/A无需选择器
get titleN/AN/A无需选择器
clickYESYES两者都支持
fillYESYES两者都支持
highlightNOYES技能文档写的是highlight @e1但这会失败

经验法则:交互命令(click、fill、type、check、select)支持 @refs;检查命令(get html/box/styles、highlight)需要 CSS 选择器。

5.2 CSS 选择器严格模式

Playwright 严格模式要求 CSS 选择器精确匹配一个元素。多元素匹配时返回错误并列出所有匹配项(对调试反而有帮助)。

唯一选择器策略:用 ID(#fork-button);用唯一属性([data-testid="submit"]);组合(.header > a:first-child);用nth(.item:nth-child(3))。

5.3 Ref 生命周期的黄金法则

refs 会被任何页面状态变化失效,包括:

  • 导航(点击链接、open、back、forward)
  • 限定范围快照(snapshot -s)——容易忘记这一点
  • 表单提交
  • 动态内容(模态框、下拉、AJAX 加载)
  • 甚至snapshot本身也会替换所有之前的 refs

模式:交互前总是立即快照。绝不在跨多个改变页面的动作间缓存 refs。

5.4 快照模式对比

标志返回内容使用时机
-i仅交互元素默认选择——token 效率最佳
-i -C交互 + 光标交互带 onclick 的 div 不出现时
-c紧凑(移除空节点)不可靠——某些站点会返回 "Empty page"
-d N深度受限-i返回过多时
-s "#sel"限定选择器聚焦单个组件
--jsonJSON 格式程序化解析

完整 DOM 列表会淹没任务所需元素时,用交互式或限定范围快照。

5.5 标注截图的已知问题

screenshot --annotate功能强大但在复杂页面上可能挂起(已知 issue #509)。挂起时:Ctrl-C 或 timeout 终止 → 回退到常规screenshot+ 单独snapshot -i→ 在简单页面效果最佳。标注截图会缓存 refs,之后无需单独快照即可立即交互。

5.6 网络监控

# 查看所有请求(从页面打开起捕获) agent-browser network requests # 只过滤 API 调用(大幅降噪) agent-browser network requests --filter "/api/" # 模拟 API 响应 agent-browser network route "https://api.example.com/data" --body '{"mocked": true}' # 拦截请求(如分析脚本) agent-browser network route "https://www.google-analytics.com/*" --abort

请求从会话开始即被捕获。--filter在真实站点上必不可少——不过滤的话会有几十条 CSS/图片/分析请求。

5.7 JavaScript 求值模式

# 快速单行(单引号,无嵌套) agent-browser eval 'document.title' # 复杂 JS(任何含引号/箭头/模板字面量的内容一律用 --stdin) agent-browser eval --stdin <<'EVALEOF' JSON.stringify( Array.from(document.querySelectorAll("a")) .map(a => ({ text: a.textContent.trim(), href: a.href })) .filter(a => a.text.length > 0) .slice(0, 10) ) EVALEOF # 从浏览器上下文发 fetch(携带页面 cookies/认证) agent-browser eval --stdin <<'EVALEOF' (async () => { const res = await fetch('/api/data'); return JSON.stringify(await res.json()); })() EVALEOF

5.8 会话管理要点

  • 用完务必关闭:agent-browser close防止守护进程泄漏
  • 调试用有头模式:agent-browser --headed open <url>
  • 持久化有头配置:在~/.agent-browser/config.json中添加{"headed": true}
  • 并行工作用命名会话:agent-browser --session name open <url>

5.9 认证与保留的浏览器状态(安全须知)

这是 LOCAL-INSIGHTS.md 中最贴近安全实践的一节,它要求 Agent 与使用者对"保留状态"保持诚实:

  • 选择已安装工具支持的 state 或 profile 机制;保存的 state 文件或持久 profile不能证明后续会话已认证——重新打开后应检查目标账号与一个有意义的授权页面/操作。服务器过期和应用策略都可能使保留状态失效;
  • 为任务使用明确归属的 profile;必须通过用户的授权流程获得登录;不要从本指南假定任何 profile、账号、应用 URL 或 provider 的变通方案;必须针对实际版本和流程核对浏览器/provider 兼容性;本笔记不附带任何经过测试的登录或保存的 profile;
  • 把 profile 目录和保存的 state 当作凭据类数据对待:放在授权的私有位置,限制访问,并从源码、普通日志和共享证据中剔除cookies、token、密码和加密密钥;如果配置了加密,要核实实际工具配置与密钥保管——不要仅凭文件名推断加密,也不要假设 shell 已导出密钥;只保留或删除任务拥有且处置被授权的状态。

5.10 更新官方技能的流程

同步 SKILL.md 与上游、同时保留本地洞察:

# 下载最新官方 SKILL.md curl -sL https://raw.githubusercontent.com/vercel-labs/agent-browser/main/skills/agent-browser/SKILL.md \ -o ~/.claude/skills/agent-browser/SKILL.md # 重新追加本地洞察引用(SKILL.md 末尾的 3 行) cat >> ~/.claude/skills/agent-browser/SKILL.md << 'EOF' ## Local Dev Insights **IMPORTANT:** Read `LOCAL-INSIGHTS.md` in this skill directory for gotchas, corrections, and tested workflows discovered through hands-on use that this upstream skill doesn't cover. EOF

这实际上把 OPENRIG.md 描述的"再同步纪律"落到了可执行命令层面:先同步上游正文,再补回本地指针。

六、再同步上游:何时以及如何做

OPENRIG.md 的 "When to re-sync upstream" 一节给出了清晰的维护纪律:关注 Vercel 的新agent-browserCLI 发布;当命令面发生有意义的变更时:

  1. 从上游重新同步SKILL.md正文,保留"Local Dev Insights" 指针小节;
  2. 更新LOCAL-INSIGHTS.md兼容性矩阵以反映新行为(某些get子命令可能获得@ref支持,从而破坏当前矩阵——这正是 5.1 节矩阵需要持续维护的原因);
  3. 在SKILL.mdfrontmatter 中更新last_upstream_check;
  4. 在divergence_notes中记录任何结构性变化。

结合 SKILL.md 的 frontmatter 可以看到这套纪律的落点:divergence_notes里正是记录着"正文追加了 Local Dev Insights 指针小节"这一唯一分歧。除这一处指针外,SKILL.md 其余内容在最近一次上游核查时与上游保持一致(见 OPENRIG.md)。

七、在 OpenRig 中的可复用价值

agent-browser 的 vendored-supplemented 模式对 OpenRig 的意义远不止一个浏览器技能:

  • 对 Agent 运行时:任何拓扑中的 Web 角色 Agent(尤其是 QA 类角色,见 qa/agent.yaml)无需额外安装,即可获得完整的浏览器自动化能力;
  • 对技能维护者:add-supplementary-files 提供了一种"上游不变、本地补充、指针发现"的三段式内置策略——用一行指针解决可发现性,用一个伴随文件承载全部本地差异,把对上游的侵入降到最低;
  • 对再同步:明确的元数据字段(last_upstream_check、divergence_notes)+ 明确的再同步步骤,让第三方技能的升级可审计、可预期。

相关文件索引

  • 关系声明:packages/daemon/specs/agents/shared/skills/process/agent-browser/OPENRIG.md
  • 技能主体:packages/daemon/specs/agents/shared/skills/process/agent-browser/SKILL.md
  • 本地实战洞察:packages/daemon/specs/agents/shared/skills/process/agent-browser/LOCAL-INSIGHTS.md
  • 规范镜像(内容一致):skills/_canonical/process/agent-browser/OPENRIG.md
  • 共享技能注册:packages/daemon/specs/agents/shared/agent.yaml
  • QA 角色技能列表:packages/daemon/specs/agents/development/qa/agent.yaml
  • 技能清单:packages/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md
  • 人工智能
  • AI Agent
  • 多智能体
  • Agent 编排
  • 代码智能体
  • CLI

【免费下载链接】openrig

Build your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.

项目地址:https://gitcode.com/GitHub_Trending/op/openrig
点击查看免费下载
上一篇:ML-Agents 机器学习背景指南:从无监督学习到强化学习与 Unity 训练闭环
下一篇:Python MCP SDK 服务端工具(Tools)开发指南:从 `@mcp.tool()` 装饰器到结构化工具定义

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表