BrowserSkill 代码结构导读:一条 bsk 命令如何走到浏览器
【免费下载链接】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 是让 AI Agent 操控用户已登录真实浏览器的自动化工具,由 Rust 命令行工具、后台守护进程与 Chrome 扩展三部分组成。本文作为代码结构导读,讲清工作区划分、两个 Rust crate 的分工,以及一条 bsk 命令的完整链路。
工作区划分:Rust、TypeScript 与评测用例
仓库顶层分三块:crates/ 是 Rust 工作区,apps/ 与 packages/ 是 TypeScript 侧,evals/ 存自动化评测用例,docs/ 存设计文档。
- Cargo.toml 声明工作区仅两个成员:
crates/bsk-cli与crates/bsk-protocol;版本号 0.3.2、Rust 1.85 在[workspace.package]统一定义,tokio、serde、clap 等依赖集中在[workspace.dependencies],crate 内以workspace = true引用; - pnpm-workspace.yaml 接管
apps/*与packages/*,扩展在 apps/extension/,packages/ 下另有 dsh 插件、i18n 等 TS 包; - Rust 集成测试在 crates/bsk-cli/tests/,共 39 个文件;扩展的测试文件则与 TS 源码同目录并列。
跟随一次截图:命令的完整链路
选bsk screenshot为例,这条命令经过的路线如下:
bsk screenshot (cli/screenshot.rs) ↓ IPC:~/.bsk/run/daemon.sock,JSON 每行一条 ipc_client.rs → daemon/ipc.rs ↓ 进入会话串行队列 (daemon/queue.rs) daemon/ws.rs → WebSocket 52800 扩展:transport/ws-transport.ts → tools/dispatcher.ts ↑ 同一协议的帧把结果带回沿途有三处值得留意。cli/screenshot.rs 解析参数并构造 bsk-protocol 定义的ScreenshotParams,随后dispatch先调用ensure_daemon()确认守护进程在跑,不在则自动拉起。ipc_client.rs 从~/.bsk/daemon.json读出 socket 路径,协议是逐行 JSON:Unix 走域套接字,Windows 走命名管道。客户端侧超时设为 35 秒,故意长于 daemon 的 30 秒工具超时,保证能拿到结构化的超时消息。
进入 daemon 后,queue.rs 为每个会话维护一条容量 64 的串行队列,把tool.*调用逐个转发给扩展并等回结果,避免 Agent 的并发调用相互踩踏。消息到达扩展侧后,dispatcher.ts 按"tool.screenshot"分支分派,由 CDP 完成真正的截图与回传。
💡 两条链路容易混淆:CLI 与 daemon 之间走本地 socket;daemon 与扩展之间走端口 52800 的 WebSocket(
DEFAULT_WS_PORT,可用--port覆盖)。
Rust 侧:两个 crate 如何分工
bsk-cli 是编译后能直接摸到bsk命令的部分;bsk-protocol 只含类型与序列化,不含业务逻辑。分工如下:
| 组件 | 路径 | 职责 |
|---|---|---|
| CLI 子命令树 | crates/bsk-cli/src/cli/ | clap 定义,一命令一文件,共 40 个源文件 |
| IPC 客户端 | crates/bsk-cli/src/ipc_client.rs | 与本地 daemon 的逐行 JSON 收发 |
| 守护进程运行时 | crates/bsk-cli/src/daemon/ | IPC/WS 服务器、会话路由、串行队列、远端连接 |
| 技能安装 | crates/bsk-cli/src/skill_install/ | 把skill/SKILL.md装进各类 AI 助手 |
| 协议类型 | crates/bsk-protocol/src/ | frame.rs帧结构、method.rs方法名、tools/入参出参 |
| JSON Schema | crates/bsk-protocol/schema/ | 111 份机器可校验的契约文件 |
💡 schema/ 下的 111 份 schema 由 Rust 类型生成,bsk-protocol 附带
dump-schema二进制可重新生成;它们不依赖 Rust 环境,其他语言可直接用来校验消息格式。
扩展侧与协议契约
扩展是 Manifest V3 浏览器扩展,源码在 apps/extension/src/:
- entrypoints/ 是一组入口,
background.ts为维持与 daemon 连接的服务工作者; - transport/ 封装 WS 连接与断线重连;
- tools/ 把
tool.*方法分派到各具体工具,session-manager/与long-screenshot/分别处理会话与整页截图管线。
这一侧与 Rust 侧共享的只有消息格式:TS 侧定义了ProtocolFrame等一套同构类型,schema 文件是双方之间的校验标准。
拆分动机与阅读落点
协议为什么单独成 crate?因为它是 CLI、daemon 与 TypeScript 扩展三方共享的契约。把它做成零业务依赖的独立 crate,各方照着同一契约实现,类似插座标准:插头与插座只要针脚对得上,通多大的电流由实现方决定。代价是新增一个工具通常要改三处:bsk-protocol 里加方法名与入参出参,bsk-cli 加一个子命令文件,扩展 dispatcher 加一个分支。
建议的阅读顺序:先看 Cargo.toml 建立工作区骨架感;再按 frame.rs → method.rs → tools/ 熟悉消息结构;然后从 screenshot.rs 顺藤摸瓜到 daemon;卡住时去 tests/ 搜同名测试文件,测试是最可靠的活文档。
更完整的架构与远端扩展连接方式见 docs/architecture.md 及 docs/ 下的其余文档。
【免费下载链接】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
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考