Skip to content
STACK IT FAST

BrowserSkill

Curated OSSClassicBrowser Automation Bridge for AI Agents6-20 people

Audited from github.com/Tencent/BrowserSkill

BrowserSkill, from Tencent, lets AI agents work inside the user's real, logged-in Chrome or Edge browser. A Rust bsk CLI/daemon and a TypeScript extension read pages, fill forms, capture screenshots and debug network requests in a visible Agent Window.

Language
TypeScript
License
MIT
Running for
3 months
Team
6-20 people

Why this architecture

The agent keeps the browser's real login state and the user can watch and take over, because the design pairs a small native Rust daemon (callable from any agent's shell) with a WXT extension, instead of running a separate headless browser. A shared protocol crate keeps both sides in sync.

Tech stack by layer

9 technologies · audited Sep 25, 2026
Frontend & UI
  • ReactReact 19 UI for the Chrome/Edge extension popup and task views in apps/extension
  • WXTWeb-extension framework that builds, zips and runs the Chromium extension in dev
  • Tailwind CSSStyling for the extension and the shared packages/ui component library (Tailwind 4)
  • TypeScriptLanguage for the extension, the VOM page model, i18n and the DeepSeek Harness plugin
Backend & APIs
  • RustThe bsk CLI and background daemon (crates/bsk-cli) that agents call from the shell
  • TokioAsync runtime for the daemon's WebSocket link to the extension and its local HTTP server
  • JSON-RPCWire protocol between CLI and extension, typed in crates/bsk-protocol with generated JSON Schemas
Infrastructure & Deploy
  • pnpmWorkspace manager for apps/* and packages/* alongside the Cargo workspace
  • VitestUnit tests for the extension, VOM, i18n and the DSH plugin
  • GitHub ActionsCI plus separate release workflows for the CLI, the extension and the DSH plugin
Tooling, Testing & Ops
  • DeepSeek Harness pluginpackages/dsh-plugin-browserskill exposes browser_* tools natively to DeepSeek Harness agents

BrowserSkill architecture diagram

Open SVG
BrowserSkill architecture diagramCoding agents → bsk CLI & daemon (bsk commands); DeepSeek Harness → bsk CLI & daemon (tools); bsk CLI & daemon → bsk-protocol (typed messages); bsk CLI & daemon → Browser extension (WebSocket); Browser extension → Agent Window (automate)CLIENTSSERVICESWORKERS & JOBSEXTERNALCoding agentsshell · skill bundlesDeepSeek Harnessbrowser_* toolsbsk CLI & daemonRust · TokioBrowser extensionReact · WXTbsk-protocolJSON-RPC · JSON SchemasAgent Windowreal Chrome / Edge tabWebSocketbsk commandstoolstyped messagesautomate
How the main components of BrowserSkill connect, drawn from the audited repository.
Diagram as text
  • Coding agents (shell · skill bundles) → bsk CLI & daemon (Rust · Tokio): bsk commands
  • DeepSeek Harness (browser_* tools) → bsk CLI & daemon (Rust · Tokio): tools
  • bsk CLI & daemon (Rust · Tokio) → bsk-protocol (JSON-RPC · JSON Schemas): typed messages
  • bsk CLI & daemon (Rust · Tokio) → Browser extension (React · WXT): WebSocket
  • Browser extension (React · WXT) → Agent Window (real Chrome / Edge tab): automate

Key architectural decisions

5 decisions
  1. 01

    A native Rust daemon plus a browser extension, not a headless browser

    crates/bsk-cli ships a single bsk binary that runs a background daemon; the WXT extension in apps/extension connects to it over WebSocket and acts inside the user's real, logged-in Chrome or Edge profile, so agents reuse existing sessions instead of launching Playwright or Puppeteer.

  2. 02

    Protocol types live in their own crate with generated JSON Schemas

    crates/bsk-protocol defines the JSON-RPC frames and tool payloads with serde and schemars; the root cli:build script runs its dump-schema binary first so the TypeScript side is built against the same schema.

  3. 03

    Agent-agnostic via a shell CLI plus installable skill bundles

    Any shell-capable agent drives the browser through bsk commands, and bsk install-skill writes the matching skill for each harness; scripts/check-skill-bundles.mjs and check-crate-skill.mjs keep the bundled skill text in sync with the crate.

  4. 04

    Tasks run in a separate visible Agent Window

    Per the README, tasks open in their own visible window and only borrow an existing tab when told to, so the user can keep working and step in for logins or verification. Recoverable session starts and browser profiles are covered in docs/.

  5. 05

    Polyglot monorepo with one version across Cargo and npm

    Cargo.toml pins workspace version 0.3.1, which the extension and DSH plugin package.json files also use. scripts/release.mjs and render-version-json.mjs drive the three release workflows (release-cli, release-extension, release-dsh-plugin).

How BrowserSkill is built

How BrowserSkill is structured

BrowserSkill is a polyglot monorepo with two workspaces side by side:

  • Cargo workspace (Cargo.toml, members crates/bsk-cli and crates/bsk-protocol, Rust edition 2024, rust-version = "1.85").
  • pnpm workspace (pnpm-workspace.yaml, covering apps/* and packages/*).

The main pieces:

Path Role
crates/bsk-cli The bsk binary: CLI commands, background daemon, skill installer
crates/bsk-protocol JSON-RPC frames, tool payloads and JSON Schemas (dump-schema binary)
apps/extension Chrome/Edge extension built with WXT and React 19
packages/vom TypeScript page-model package used by the extension
packages/ui Shared React components (class-variance-authority, tailwind-merge)
packages/i18n i18next setup shared across UIs
packages/dsh-plugin-browserskill DeepSeek Harness plugin exposing browser_* tools
evals/browser Browser task evaluations run with node --test

docs/architecture.md describes the design. Focused docs cover browser profiles, long screenshots, operation audit, remote extension connection, sandboxed agents and website debugging.

Frontend

The extension in apps/extension uses WXT (opens in a new tab) for building, zipping and dev reload, with React 19, @remixicon/react icons and Tailwind CSS 4 through @tailwindcss/vite. Shared primitives come from @browser-skill/ui, which exports TypeScript source directly ("exports": { ".": "./src/index.ts" }) so no separate build step is needed inside the workspace. Tests run on Vitest with happy-dom and Testing Library.

Backend & APIs

There is no hosted backend. The "server" is the local bsk daemon in crates/bsk-cli, built on Tokio:

  • tokio-tungstenite holds the WebSocket connection to the extension.
  • hyper and hyper-util provide a small local HTTP server, with tokio-rustls for TLS.
  • clap, dialoguer and console power the interactive CLI (for example bsk install-skill).
  • reqwest (rustls), flate2, tar, zip and sha2 handle self-update and bundle downloads.
  • tracing with tracing-appender writes structured logs.
  • Platform-specific process control uses nix and libc on Unix and windows-sys job objects and pipes on Windows.

crates/bsk-protocol depends only on serde, schemars, semver and thiserror, which keeps the wire contract small and publishable to crates.io on its own.

Data & persistence

BrowserSkill keeps no database. State lives in the browser (login sessions, the extension's local debugging history, which can be exported as JSON) and in local files written by the daemon (logs, and an optional operation audit described in docs/operation-audit.md).

Build, test & deploy

  • pnpm cli:build runs cargo run -p bsk-protocol --bin dump-schema --locked and then pnpm -r build, so schema generation always happens before the TypeScript builds.
  • Linting uses Biome (biome.json) plus Stylelint for CSS. Rust formatting and lints are configured in rustfmt.toml and clippy.toml, and the toolchain is pinned in rust-toolchain.toml.
  • GitHub Actions: ci.yml plus release-cli.yml, release-extension.yml and release-dsh-plugin.yml.
  • install.sh and install.ps1 install the prebuilt binary to ~/.local/bin. scripts/test-windows-daemon.ps1 covers Windows daemon behaviour.
  • The release profile strips symbols and uses thin LTO with a single codegen unit.

Self-hosting notes

Local use needs three things: the bsk CLI (macOS, Linux x64/ARM64, Windows x64), the extension from the Chrome Web Store or Edge Add-ons (Chromium 125+), and a skill installed for the agent. AGENT_INSTALL.md is written so the agent itself can follow it. Agents running in sandboxes or on remote servers are covered in docs/sandboxed-agents.md and docs/remote-extension-connection.md.

What to copy (and what not to)

What to copy

  • Putting the wire protocol in its own dependency-light crate and generating JSON Schemas from it before building the TypeScript side.
  • Exposing a capability to every agent through a plain CLI plus installable skill text, instead of writing one integration per agent framework.
  • Workspace packages that export .ts source directly, which removes internal build steps in a pnpm monorepo.

What not to copy

  • Keeping versions in sync by hand across Cargo and several npm packages needs custom release scripts (scripts/release.mjs). Smaller projects can release components on their own version tracks.
  • The packageExtensions patch in pnpm-workspace.yaml covers for an upstream package's missing dependencies. That kind of workaround needs a comment and an exit plan.

Sources & repo audit

Audited
Sep 25, 2026
Commit
147727a
License
MIT

Independent analysis of repository at github.com/Tencent/BrowserSkill. Spotted an inaccuracy? Use the claim form to request a correction.

Maintainer? Add the architecture badge to your README
architecture: stackitfast
[![Architecture on STACK IT FAST](https://stackitfast.com/badge/browserskill.svg)](https://stackitfast.com/project/browserskill)
Use this stack

Scaffold it with your agent

Paste this prompt into Claude Code, Cursor, Windsurf or AGY to start a project with BrowserSkill's architecture.

  1. 1Copy the promptThe full markdown spec, with every layer and decision.
  2. 2Open your AI toolClaude Code, Cursor, Windsurf or Copilot, in a new repo.
  3. 3Paste and scaffoldUse it as the first instruction; review before you ship.
use-this-stack.md · 59 lines · 6.9 KB
# MISSION: Scaffold "BrowserSkill" Production Architecture
You are an expert Senior Staff Software Architect and Full-Stack Engineer. Your mission is to scaffold and implement a production-grade, highly reliable, and modular codebase following the proven architecture of **BrowserSkill**.
---
## 1. PROJECT SPECIFICATIONS & BENCHMARK
- **Reference Architecture**: BrowserSkill
- **What It Does**: BrowserSkill, from Tencent, lets AI agents work inside the user's real, logged-in Chrome or Edge browser. A Rust bsk CLI/daemon and a TypeScript extension read pages, fill forms, capture screenshots and debug network requests in a visible Agent Window.
- **Domain & Category**: Browser Automation Bridge for AI Agents
- **Production Scale**: 6-20 people
- **Development Mode**: CLASSIC
- **Architectural Rationale**: The agent keeps the browser's real login state and the user can watch and take over, because the design pairs a small native Rust daemon (callable from any agent's shell) with a WXT extension, instead of running a separate headless browser. A shared protocol crate keeps both sides in sync.
- **Live Website Reference**: https://github.com/Tencent/BrowserSkill
- **Source Repository**: https://github.com/Tencent/BrowserSkill
---
## 2. PRODUCTION TECH STACK
- **Full Stack Array**: Rust, TypeScript, Tokio, React, Tailwind CSS, WXT, Vitest, pnpm, GitHub Actions
- **Primary Language(s)**: TypeScript, Rust, JavaScript, PowerShell
- **License of the reference repo**: MIT
- **Frontend**: React — React 19 UI for the Chrome/Edge extension popup and task views in apps/extension; WXT — Web-extension framework that builds, zips and runs the Chromium extension in dev; Tailwind CSS — Styling for the extension and the shared packages/ui component library (Tailwind 4); TypeScript — Language for the extension, the VOM page model, i18n and the DeepSeek Harness plugin
- **Backend & APIs**: Rust — The bsk CLI and background daemon (crates/bsk-cli) that agents call from the shell; Tokio — Async runtime for the daemon's WebSocket link to the extension and its local HTTP server; JSON-RPC — Wire protocol between CLI and extension, typed in crates/bsk-protocol with generated JSON Schemas
- **Infrastructure & deploy**: pnpm — Workspace manager for apps/* and packages/* alongside the Cargo workspace; Vitest — Unit tests for the extension, VOM, i18n and the DSH plugin; GitHub Actions — CI plus separate release workflows for the CLI, the extension and the DSH plugin
- **Tooling, testing & ops**: DeepSeek Harness plugin — packages/dsh-plugin-browserskill exposes browser_* tools natively to DeepSeek Harness agents
---
## 3. KEY ARCHITECTURAL DECISIONS (audited from https://github.com/Tencent/BrowserSkill @ 147727a)
1. **A native Rust daemon plus a browser extension, not a headless browser**: crates/bsk-cli ships a single bsk binary that runs a background daemon; the WXT extension in apps/extension connects to it over WebSocket and acts inside the user's real, logged-in Chrome or Edge profile, so agents reuse existing sessions instead of launching Playwright or Puppeteer.
2. **Protocol types live in their own crate with generated JSON Schemas**: crates/bsk-protocol defines the JSON-RPC frames and tool payloads with serde and schemars; the root cli:build script runs its dump-schema binary first so the TypeScript side is built against the same schema.
3. **Agent-agnostic via a shell CLI plus installable skill bundles**: Any shell-capable agent drives the browser through bsk commands, and bsk install-skill writes the matching skill for each harness; scripts/check-skill-bundles.mjs and check-crate-skill.mjs keep the bundled skill text in sync with the crate.
4. **Tasks run in a separate visible Agent Window**: Per the README, tasks open in their own visible window and only borrow an existing tab when told to, so the user can keep working and step in for logins or verification. Recoverable session starts and browser profiles are covered in docs/.
5. **Polyglot monorepo with one version across Cargo and npm**: Cargo.toml pins workspace version 0.3.1, which the extension and DSH plugin package.json files also use. scripts/release.mjs and render-version-json.mjs drive the three release workflows (release-cli, release-extension, release-dsh-plugin).
---
## 4. NON-NEGOTIABLE ARCHITECTURAL GUARDRAILS
1. **Monorepo & Modular Separation**:
   - Structure as a Turborepo monorepo with strict package boundaries:
     - `apps/web`: Application UI, routing, layouts, and server endpoints.
     - `packages/ui`: Shared design tokens, CSS variables, and Radix UI primitive components.
     - `packages/db`: Database schemas, client singleton, declarative migrations, and seed scripts.
     - `packages/config`: Shared TypeScript, ESLint, and build configurations.
2. **Strict Type Safety & Zero `any` Policy**:
   - Enable `strict: true`, `noImplicitAny: true`, and `strictNullChecks: true`.
   - Validate ALL external inputs, API request bodies, and query parameters with **Zod** schemas before execution.
3. **Frontend & Rendering Guidelines**:
   - Utilize Vite 6 with TanStack Router for fully type-safe routing. Manage server state and caching via TanStack Query v5 with optimistic UI updates.
4. **Design System & Aesthetics**:
   - Keep every color, radius, shadow and font in a single token file (CSS variables) and consume tokens everywhere; never hardcode hex values in components.
   - Prefer crisp 1px borders and one subtle shadow scale over blurry default shadows. Pair one sans-serif for body/headings with one monospace for tags, badges, metrics, and code.
5. **Data Layer & Reliability**:
   - Write declarative schema definitions with foreign keys, composite indexes on queried filters, and automated timestamp triggers.
   - Use connection pooling and prepared statements for serverless database execution.
---
## 5. STEP-BY-STEP SCAFFOLDING ROADMAP
- **Phase 1: Workspace & Root Config**: Initialize package manager, monorepo configuration (`turbo.json`, `tsconfig.base.json`, `package.json`).
- **Phase 2: Database Schema & Client**: Set up the data layer: client, connection pool, models, and migration scripts.
- **Phase 3: Design Tokens & UI Primitives**: Build accessible `Button`, `Input`, `Card`, `Badge`, and layout wrappers inside `packages/ui`.
- **Phase 4: Core Application Routes & Handlers**: Implement primary authentication, user session handling, and application routes.
- **Phase 5: Quality Assurance & Build Verification**: Run `tsc --noEmit`, ESLint, Prettier, and smoke test suites to ensure zero compilation or runtime errors.
---
## 6. EXECUTION INSTRUCTIONS
1. Review all specifications, architectural guardrails, and stack choices above.
2. Present the full monorepo directory tree structure.
3. Systematically generate the complete, production-ready codebase according to the 5-phase roadmap above — starting with the root workspace setup, followed by the database schema, UI design system package, and full-stack application routes until the repository is fully scaffolded and ready to run.
Scaffolded something with this prompt?
Would you pick this stack for a browser automation bridge for ai agents project?

Frequently asked about BrowserSkill

What is BrowserSkill built with?

BrowserSkill combines a Rust CLI and daemon (bsk, built on Tokio) with a Chromium extension written in TypeScript and React 19 using the WXT framework and Tailwind CSS 4. The two sides talk JSON-RPC over WebSocket, with types defined in the bsk-protocol crate.

How is BrowserSkill different from Playwright or Puppeteer automation?

Instead of launching a separate headless browser, BrowserSkill drives the user's existing Chrome or Edge profile through an extension, so the agent can use sites the user is already signed into. Tasks run in a visible Agent Window.

Which AI agents can use BrowserSkill?

Any shell-capable agent that can run the bsk CLI, such as Cursor, Claude Code or Codex, after installing the matching skill with bsk install-skill. DeepSeek Harness has a dedicated plugin with native browser tools.

Does BrowserSkill need a server?

No hosted server is required. The bsk daemon runs locally next to the browser. For agents running on a remote server, a documented remote-extension connection pairs them with the browser on the user's computer.

One email a month: new deep dives and stack trends

New source-audited architectures, head-to-head comparisons and the monthly stack report. No spam, unsubscribe anytime.

use-this-stack.md