BrowserSkill 架构解析:CLI、Daemon 与 MV3 扩展如何协同驱动真实浏览器自动化

📅 发布时间:2026/9/20 0:58:30
BrowserSkill 架构解析:CLI、Daemon 与 MV3 扩展如何协同驱动真实浏览器自动化
【免费下载链接】BrowserSkillLet AI agents use your real, logged-in browser without interrupting your work. CLI extension for browser automation across any shell-capable AI agent.项目地址https://gitcode.com/GitHub_Trending/br/BrowserSkill点击查看免费下载BrowserSkill 是一个让任意具备 shell 能力的 AI Agent如 Claude Code、Cursor、Codex通过命令行 浏览器扩展组合安全复用用户真实登录态浏览器完成自动化任务的工具。本文以仓库 docs/architecture.md 为核心骨架结合crates/bsk-cli、crates/bsk-protocol与apps/extension的源码实现深入讲解 CLI、daemon、MV3 扩展三方组件的职责划分、会话与沙箱模型、并发调度、连接安全与文件传输边界帮助读者掌握这套架构的设计原理与实战部署要点。系统总览一次工具调用的完整链路BrowserSkill 的默认本地部署由四类角色组成运行 Agent 的harness、开发者机器上的bsk CLI与bsk daemon、以及浏览器内的bsk MV3 扩展。系统图如下图中的SKILL.mdskill/SKILL.md是 Agent 的工作流说明书它让 Agent 学会何时调用bsk session start、如何按eN引用操作元素、何时必须bsk session stop。整个链路由三层协议串联harness → CLIAgent 通过 shell 调用bsk动词-名词子命令如bsk click、bsk scroll_toCLI 负责解析参数并渲染输出CLI → daemonCLI 通过 Unix Domain SocketUDS默认$BSK_HOME/run/daemon.sockWindows 下为命名管道以 JSON Lines 逐行发送请求daemon → 扩展daemon 将工具调用以 WebSocket JSON 帧转发到对应扩展连接扩展再通过 CDPChrome DevTools Protocol WebExtension API 驱动真实浏览器标签页。在 remote mode 下CLI 与 daemon 运行在服务器上扩展从用户浏览器通过带认证的 WSS 连接此时 CLI 与 daemon 之间的通信依然是服务器本地的 IPC拓扑不变、只是部署位置迁移。一次典型工具调用的五步路由架构文档给出了一个具体的调用示例结合源码可还原完整路径Agent 发起bsk click e1 --tab-id 42 --session ab12——CLI 解析click子命令与e1快照引用CLI 确保 daemon 存活ipc_client.rs先探测 daemon若发现或监听器缺失才自动拉起BSK_AUTO_START0可禁用隐式启动宿主托管的 daemon 场景见 sandboxed-agents.md随后打开 UDS 连接发送一行 JSON 请求daemon 会话路由daemon 依据会话 IDab12解析到对应浏览器客户端通过tool.click方法经 WS 转发见 daemon 状态注册表 中的tool_inflight与tool_queues设计扩展分发执行ToolDispatcher校验沙箱规则后通过BrowserDriver调用 CDP 完成点击apps/extension/src/tools/dispatcher.ts结果回传响应沿CLI ← daemon ← 扩展逐级返回CLI 打印人类可读结果后退出--json标志则输出结构化响应。这一路由对tool.scroll_to同样适用。它被归类为浏览器变更操作browser mutation因此会进入会话队列参与并发序列化、并受用户中断门控详细契约见 scroll-to.md。组件职责分解bsk CLI动词-名词命令树crates/bsk-cliCLI 使用 Clap 构建命令树顶层子命令覆盖完整工具集。从 crates/bsk-cli/src/cli/mod.rs 的命令文档字符串可以看到生命周期session start/session stop/session list、daemon start|stop|restart、doctor、update、logs浏览器管理browsers列出已连接扩展、tab create|close|select|borrow|return、windowAgent Window 管理、emulate移动设备仿真观测与交互screenshot、snapshotaria 快照 eN引用、observe语义 VOM 观测、console、network、get_html、navigate/back/forward/reload、click、hover、wheel、scroll_to、focus、blur、fill、press、select、upload、download、evaluate、wait_for_navigation、wait_ms等。全局参数包括--json机器可读输出、静默模式与-v/-vv日志级别。CLI 的职责边界非常清晰只负责命令解析、IPC 通信与结果渲染不直接接触浏览器。bsk daemon会话路由与状态中枢同一二进制bsk daemondaemon 与 CLI 是同一 Rust 二进制crates/bsk-cli的两个入口。本地模式下它在回环地址监听 WebSocket默认端口52800可用bsk daemon start --port调整扩展 popup 保存匹配的连接端口保存端口会结束现有会话并在启用时重连。daemon 的核心职责源码见 daemon 启动流程 与 DaemonState握手校验在 WS 升级时验证Origin: chrome-extension://…实现见 crates/bsk-cli/src/daemon/ws.rs 的origin_allowed要求 32 位 a–p 字符的 MV3 扩展 ID 格式双注册表browsers维护已连接扩展sessions维护 Agent Window 绑定SessionRegistry每会话队列ToolQueueRegistry串行化针对同一会话的工具调用保证 ref-store 安全转发与取消tool.*RPC 转发到正确的扩展连接tool_inflight跟踪已转发未响应的调用支持cancel { rpc_id }取消链扩展端对应 ToolDispatcher 的 AbortController 机制后台任务会话空闲回收默认 5 分钟、浏览器心跳保活回收BROWSER_LIVENESS_TIMEOUT默认 60 秒见 crates/bsk-cli/src/daemon/browsers.rs、自动更新检查有活跃会话时推迟安装。daemon 状态文件~/.bsk/下文件用途daemon.lock咨询锁保证单 daemon 实例lockfiledaemon.json{ sock_path, pid, ws_port, version }元数据daemon.log滚动追踪日志daemon.pidPID供 status/doctor 使用bsk 扩展CDP 驱动与沙箱执行apps/extension扩展基于 WXT / MV3 构建React popup 提供连接状态 UIservice worker 承载后台逻辑。目录职责如下目录职责transport/可插拔Transport接口v1 实现为WSTransport指数退避重连 1s→2s→4s→…上限 5s见 ws-transport.tstools/ToolDispatcher分发 21 个工具处理器含每 RPC 的AbortController取消链session-manager/会话、Agent Window 生命周期、ref-storeeNbrowser-driver/CDP 驱动的浏览器操作chromium-cdp.ts、frame-graph.tsentrypoints/popup/连接状态 UIconnection-status-indicator.tsxcontent/Agent Window 内的控制覆盖层Control Overlay与借用确认、求助弹层bsk-protocol共享线协议与 Schemacrates/bsk-protocolcrates/bsk-protocol提供共享的 Rust 类型与 JSON Schema 生成crates/bsk-protocol/schema/*.json。TypeScript 侧在 apps/extension/src/transport/types.ts 中镜像帧结构——刻意保持结构化 interface 而非 class使同一 JSON 在两侧无需适配器即可解析。协议帧分为三类ProtocolFrameRequestFrame{ id, method, params }OkResponseFrame/ErrResponseFrame{ id, result }或{ id, error }EventFrame{ event, payload }错误模型也很完整ErrorCode如unknown_method、permission_denied、no_browser_connected、multiple_browsers_onlineRpcErrorData.reason超过 60 种细粒度原因从element_not_visible、borrow_conflict到transfer_timeout供 CLI 选择提示文案。会话与沙箱模型安全边界的关键会话Session是隔离的基本单元由三部分组成不透明 IDv0.1 中为 4 位小写字母源码SessionId::random()生成见 sessions.rs专属 Agent Window会话专属的浏览器窗口会话级 ref-store 借用表borrow table管理eN元素引用与从用户窗口借入的标签页。沙箱规则的核心约束写操作要求标签页位于 Agent Window 内除非该标签页是从用户 profile 中显式借用borrowed的。这意味着远程内容读取与操作必须使用任务创建的标签页或显式借用的标签页页面自行弹出的 popup 或用户手动移入 Agent Window 的标签页不会自动受控详见 remote-extension-connection.md。会话停止是强制要求Agent 工作流中必须以bsk session stop显式收尾5 分钟的空闲超时只是兜底安全网daemon 通过spawn_session_idle_reaper周期扫描回收。单个浏览器上可同时存在多个会话 → 多个 Agent Window彼此完全隔离。evaluate在沙箱模式下被限制为只能作用于 Agent Window 内的标签页进一步收窄任意 JS 执行面。tab_list 的作用域scopescope可见标签页user用户 profile 窗口默认agent当前会话的 Agent Window 内all该会话的 Agent Window 用户窗口借用Borrow流程tool.tab_borrow把用户标签页借入 Agent Window扩展端通过 content script 覆盖层请求用户确认approveBorrow回调涉及 BorrowConfirmationOverlay.tsx。借用成功后返回original_window_id与original_index任务结束由tool.tab_return归还到原位置实现用完即还的受控协作。并发模型串行与并行的边界作用域策略同一会话daemon 串行化 RPCToolQueueRegistry每会话队列保护 ref-store 一致性不同会话并行执行多浏览器连接多个扩展时用bsk session start --browser id指定目标浏览器daemon 侧还配套了tool_inflight注册表与AbortRegistry前者跟踪已转发未响应的调用使cancel能翻译成 WS 侧取消帧后者为tool.wait_ms等 daemon 侧长任务提供取消令牌。模块依赖图Rust 侧bsk-cli依赖bsk-protocol类型与 schema 的唯一来源TS 侧的 background 订阅 Transport 消息流ToolDispatcher 协调 SessionManager 与 BrowserDriverSessionManager 复用 BrowserDriver 完成窗口/标签页操作。连接安全设计监听地址本地模式 WebSocket 仅绑定回环地址listen_ip()默认为127.0.0.1见 start.rs服务器模式通过认证 WSS 允许远程访问明文监听器仅保留在 TLS 终止之后或开发用途。Origin 白名单WS 升级时校验扩展 Originorigin_allowed要求chrome-extension://前缀 32 位 a–p 扩展 ID 格式--insecure-origin仅测试用。凭据边界网站 cookie 始终留在用户浏览器 profile 中远程设备凭据存储在扩展源extension-origin的 IndexedDB 内内置服务器则把凭据哈希存放在其私有BSK_HOME。远程访问由配对pairing与设备授权device grants治理。操作审计启用后审计记录存储在 daemon 宿主上远程模式下即服务器侧见 operation-audit.md。文件传输边界上传/下载仅支持本地连接远程会话返回unsupported截图等纯 RPC 内容结果不受影响。文件传输边界跨进程职责与不确定性处理文件传输是架构中职责划分最精细的部分三层各有明确边界CLI唯一触碰用户路径的组件由调用方 Agent/harness 决定传输是否被授权并提供任务本地路径。CLI 是唯一读取上传源、写入最终下载目标的组件在浏览器派发前负责回滚部分暂存的上传派发后所有权移交会话因为传输超时无法证明 Chrome 未附加文件。下载输出通过一次原子提交可见替换是显式选择、无预先删除窗口。扩展永远收不到面向 Agent 的路径。daemon存储能力与限额的权威签发不透明的会话级传输 ID在私有运行目录暂存有界分块仅注入私有暂存上传路径下载时铸成一个相对 Chrome 目录能力。只有校验了报告路径、文件类型、符号链接边界与权威字节限额后才接管浏览器文件清理并导入字节。扩展仅拥有浏览器事务每次传输解析一个ResolvedActionTarget。上传默认机制在点击前武装 Chrome 的 chooser 拦截接受精确的Page.fileChooserOpened输入节点或锚定在触发节点文档中的独立探针以DOM.setFileInputFiles提交唯一验证过的 input非 input 选择器立即拒绝。显式 drop 模式不点击、绝不回退到 chooser 机制几何解析后临时排除 BrowserSkill 自身覆盖层验证解析出的放置区域仍拥有本地动作点向该节点的 CDP target 发送一次原生dragEnter/dragOver/drop事务后恢复覆盖层OOPIF 放置使用 target 本地坐标而非顶层点击坐标。下载则关联精确 target 的 CDP 意图与chrome.downloads文件名候选两种到达顺序均可只认领一个唯一匹配绝不取消未认领候选。结果与补偿语义浏览器侧操作上报effect_statenone/committed/unknown、phase与cleanup_state。已确认成功优先于迟到的取消未知效果跨超时或传输丢失保留不得盲目重试。传输截止时间向扩展发送取消并让会话队列保持占用来做有界补偿而非抛弃进行中的浏览器效果。暂存生命周期下载暂存在 CLI 提交后释放上传暂存保留到会话拆除页面可能只在后续表单提交时才读取附件剩余暂存在会话停止/浏览器断开以及 daemon 崩溃后启动时释放。BrowserSkill 不检查内容、也不决定传输是否合适——这是调用方的职责。这些边界在 crates/bsk-cli/src/daemon/file_transfer.rs、transfer-transaction.ts、file-input-transaction.ts 与 file-drop-transaction.ts 中均有对应实现与测试覆盖。仓库布局速览browser-skill/ ├── apps/extension/ # WXT Chromium 扩展transport / tools / session-manager / browser-driver / popup / content ├── crates/ │ ├── bsk-cli/ # bsk 二进制CLI daemon含 remote 服务器模式 │ └── bsk-protocol/ # 线协议类型 JSON Schemaschema/*.json ├── install.sh # CLI 安装器 ├── skill/SKILL.md # Agent harness 工作流指令 └── docs/ # 架构与使用指南architecture、remote-extension-connection、sandboxed-agents、operation-audit、scroll-to、wheel 等实践要点总结启动顺序bsk daemon start或让 CLI 自动拉起→ 浏览器加载扩展并在 popup 中确认端口默认 52800→bsk session start创建 Agent Window → Agent 开始调用工具 → 结束后必须bsk session stop。多浏览器连接多个扩展时用--browser id指定bsk browsers可列出已连接浏览器实例。安全默认本地回环监听 Origin 白名单 沙箱写操作边界远程模式必须走设备配对与 WSS。排障入口bsk doctor运行诊断与修复提示bsk logs追踪 daemon 日志daemon.lock/daemon.json/daemon.pid是状态核查的第一现场。深入阅读想继续追源码推荐从 crates/bsk-cli/src/daemon/start.rsdaemon 生命周期与 apps/extension/src/tools/dispatcher.ts工具分发与取消链入手配合 crates/bsk-cli/tests/ 下的集成测试理解端到端行为。赞分享【免费下载链接】BrowserSkillLet AI agents use your real, logged-in browser without interrupting your work. CLI extension for browser automation across any shell-capable AI agent.项目地址https://gitcode.com/GitHub_Trending/br/BrowserSkill点击查看免费下载相关推荐BrowserSkill 浏览器自动化技能实战bsk CLI 驱动的 AI Agent 浏览器操作指南BrowserSkill 浏览器自动化技能实战bsk CLI 驱动的 AI Agent 浏览器操作指南 skill/SKILL.md 是 BrowserSkiBrowserSkill 的 browser-skill 技能指南用 bsk CLI 驱动真实登录态浏览器完成自动化任务BrowserSkill 的 browser skill 技能指南用 bsk CLI 驱动真实登录态浏览器完成自动化任务 BrowserSkill 通过 bs终极指南Steel Browser模块化架构如何实现浏览器自动化的无限扩展终极指南Steel Browser模块化架构如何实现浏览器自动化的无限扩展 Steel Browser是一个功能强大的开源浏览器API专为AI代理和应用程序浏览器控制AI 应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考