关于 opensteer
opensteer 是供 Agent 和 harness pack 使用的浏览器控制运行时,提供可复用的浏览器会话和 CDP 交互辅助工具。支持连接本地、应用内及云端浏览器。
主要功能
- 01可复用的浏览器会话
- 02连接本地、应用内及云端浏览器
- 03选择浏览器配置档
- 04CDP 与页面交互辅助工具
- 05通用浏览器交互技能
适用场景
- 01在多个 Agent 运行间复用浏览器
- 02检查页面并操作浏览器标签页
- 03让 Agent 连接云端浏览器
- 04借助交互技能处理复杂页面机制
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ steerlabs/ opensteer --skill opensteer安装后在 Claude Code 中输入/opensteer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
interaction-skills/connection.mdcookies.mdcross-origin-iframes.mddialogs.mddownloads.mddrag-and-drop.mddropdowns.mdiframes.mdnetwork-requests.mdprint-as-pdf.mdscreenshots.mdscrolling.mdshadow-dom.mdtabs.mduploads.mdviewport.md详细介绍
Opensteer
Opensteer 是一款全球浏览器控制运行时。它向 Agent 和 harness 包提供小型 CDP 原语。
用法
opensteer -c "open_browser(profile='fresh'); new_tab('https://example.com'); print(page_info())"
Python 代码片段运行时会预先导入辅助函数:
opensteer -c "new_tab('https://docs.opensteer.com'); wait_for_load(); print(page_info())"
对于 harness 代码,请从已安装的软件包中导入辅助函数:
from opensteer.helpers import goto_url, js, click_at_xy, type_text, wait_for_load
显式浏览器会话
进行浏览器操作时,请明确选择浏览器配置文件和复用模式。返回的句柄恰好绑定到一个平台会话,其稳定身份使浏览器可供后续 CLI 调用和后续 Agent 运行复用:
opensteer -c "browser = open_browser(label='research', profile='fresh'); browser.new_tab('https://example.com')"
opensteer -c "browser = open_browser(label='work', profileId='bp_...'); print(browser.page_info())"
opensteer -c "browser = open_browser(profileId='bp_...'); print(browser.page_info())"
仅当你有意让平台选择唯一获准的配置文件(或者在没有授权配置文件时选择未指定配置文件的浏览器),才使用 profile='auto'。
mode='reuse' 是默认值。它会为此 Agent、位置和配置文件选择稳定的主浏览器。label 是可选的可变显示元数据:指定不同的标签会在 UI 中重命名同一浏览器;省略该参数则保留当前标签。它绝不会选择或创建其他浏览器。只有在有意使用另一个独立逻辑浏览器时,才使用 mode='new'。
profile='fresh' 表示不附加已保存的配置文件。它不保证浏览器是全新的、干净的或已退出登录,因为 mode='reuse' 可能会返回之前使用过的未指定配置文件的浏览器,包括之前运行中使用的浏览器。需要独立的干净状态时,请使用 profile='fresh', mode='new'。
读取辅助函数不会创建云端浏览器。如果没有活动浏览器,请先调用 open_browser(...)。
列出并明确选择正在运行的浏览器,不创建新浏览器:
opensteer -c "print(list_browsers())"
opensteer -c "browser = use_browser('linkedin'); print(browser.page_info())"
list_browsers() 只读。use_browser(...) 接受唯一标签或列表返回的确切 sessionId。
浏览器的生命周期会超出单次 Agent 命令或运行。正常的进程或运行关闭只会断开控制中继。仅当需要销毁浏览器本身时,才调用 browser.close()(或相应的关闭 API)。
浏览器传输方式独立于 Agent 的执行位置。需要本地执行的 Agent 使用隔离的云端浏览器时,请使用 location='cloud';需要使用桌面应用内嵌浏览器时,请使用 location='inapp';需要使用独立的机器 Chromium 窗口时,请使用 location='local'。常规自动路由时,请省略此参数(或使用 location='auto')。云端执行仅支持 auto 和 cloud,不接受仅限设备的位置:
opensteer -c "open_browser(label='research', profile='fresh', location='cloud')"
浏览器配置文件
浏览器配置文件是已保存并登录的浏览器身份(Cookie、身份验证状态),云浏览器可以使用它启动。配置文件访问权限通过授权授予:服务器会跟踪此 Agent 可以使用哪些配置文件,并且不会为每个 Agent 设置默认配置文件。
list_cloud_profiles()会列出可见的配置文件;每个条目都带有granted标记,说明此 Agent 是否可以使用该配置文件。open_browser(label=name, profile='auto')会让服务器解析配置文件:恰好有一个已授权的配置文件时会自动附加;没有已授权的配置文件时会启动一个未关联配置文件的会话;有多个已授权的配置文件时则会报错,提示你传入profileName或profileId。- 有多个配置文件获授权时,请明确选择一个:
open_browser(label='linkedin', profileName='LinkedIn work')或open_browser(label='linkedin', profileId='bp_...')。需要长期使用的脚本应固定使用profileId,因为它在配置文件重命名后仍然有效。 - 传入未授权给此 Agent 的配置文件时会失败,并返回 403 错误;错误消息会说明后续操作(列出已授权的配置文件或申请访问权限)。
- 已授权的配置文件可搭配
location='inapp'或location='cloud'使用。如果提供方无法满足请求的配置文件或位置要求,则会失败,且两者都不会改变。
平台配置文件工具会将访问申请与保存当前状态分开处理:
request_browser_profile会请用户选择现有配置文件或授予其访问权限。如果已授权的配置文件处于登出状态,请打开该确切的配置文件,让用户接管并登录,然后继续。此处没有修复模式;浏览器正常关闭时的持久化操作会保存更新后的登录状态。request_save_browser_profile会保存已打开但未关联配置文件的浏览器。只有在未来可能需要再次使用时才提供此选项;切勿自动保存,也不要在用户拒绝后继续询问。用户直接要求保存即表示已批准;否则,请先通过request_user_input获得明确批准。保留open_browser(...)返回的句柄(或通过use_browser(...)找回),并传入其中准确的browser.browser_ref;绝不能传入其标签,也不能猜测当前浏览器。专用 Agent 不传入cloudAgentId,并由其自身获得授权。Chat 可以指定目标专用 Agent,也可以省略目标以保存为未分配状态;Chat 自身永远不会获得授权。持久保存的内容是某一时刻基于 Cookie 的身份验证快照,不会关闭或重新绑定源浏览器,也不会持续同步。
交互技能
通用浏览器操作机制位于 interaction-skills/ 中:
- connection.md
- cookies.md
- cross-origin-iframes.md
- dialogs.md
- downloads.md
- drag-and-drop.md
- dropdowns.md
- iframes.md
- network-requests.md
- print-as-pdf.md
- screenshots.md
- scrolling.md
- shadow-dom.md
- tabs.md
- uploads.md
- viewport.md
页面操作机制较复杂时请使用这些技能。领域专用的选择器、工作流、API、本地数据库和任务工具应放在 harness pack 中。
适用场景
- 查看可见状态时,先截取屏幕截图:
capture_screenshot()。 - 对可见目标,优先使用坐标点击:
click_at_xy(x, y)。 - 使用
js(...)检查和提取 DOM,并发现页面 API。 - 对辅助工具未涵盖的原始 CDP 操作,使用
cdp("Domain.method", ...)。 - 页面导航后,调用
wait_for_load()。 - 默认导航到当前由 Opensteer 管理的标签页;只有用户明确要求使用某个特定的现有标签页时,才使用
list_tabs()和switch_tab(target_id)。 - 如果页面重定向到登录页,请停止并询问用户。不要根据屏幕截图输入凭据。
职责边界
Opensteer 负责通用浏览器基础功能、本地连接、远程连接、云浏览器连接以及通用交互技能。
Harness pack 负责领域专用工具、选择器、工作流、存储、设置文档和 Agent 技能。