4 views
Tencent/BrowserSkill
Let AI agents use your real, logged-in browser without interrupting your work. CLI + extension for browser automation across any shell-capable AI agent.
TypeScript★ 5,432+1,306 that day#4 on trending
E29.5/100
Duplication51
8.3% in typescript, rust, tsx, javascript, bash, powershell, perlDead code8
27.9%Complexity42
63.4% The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
3.31%duplicated code · 2,913 of 87,916 lines
242clones in code
350code files of 734 scanned
12.55%duplicated over all files · 1,308 clones
Most complex files
- packages/vom/src/render.ts509 cx
- apps/extension/src/tools/__tests__/observation.test.ts451 cx
- apps/extension/src/tools/__tests__/interaction.test.ts403 cx
- apps/extension/src/tools/vom/__tests__/capture-coordinator.test.ts390 cx
- apps/extension/src/tools/interaction.ts357 cx
- apps/extension/src/tools/__tests__/dispatcher.test.ts324 cx
- apps/extension/src/content/record-capture.ts323 cx
- apps/extension/src/tools/record.ts301 cx
- apps/extension/src/browser-driver/chromium-cdp.ts292 cx
- crates/bsk-cli/src/daemon/ipc.rs290 cx
Dead code 27.91% unused · 318 findings
- apps/extension/src/tools/interaction.tsunused-file
- apps/extension/src/tools/tabs.tsunused-file
- apps/extension/src/tools/observation.tsunused-file
- apps/extension/src/tools/record.tsunused-file
- apps/extension/src/tools/navigation.tsunused-file
- apps/extension/src/tools/dispatcher.tsunused-file
- apps/extension/src/content/record-capture.tsunused-file
- apps/extension/src/tools/human-loop.tsunused-file
- apps/extension/src/content/HelpRequestOverlay.tsxunused-file
- apps/extension/src/tools/borrow-confirmation.tsunused-file
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code.
Largest clones in the code
- 202 lines in 2 placesrust1,436 tokens
272 pub trace: RecordedTrace, 273} 274 275#[cfg(test)] 276mod tests { 277 use super::*; 278 use serde_json::json; 279 280 fn sample_common(id: u32, state: &str, result_state: &str) -> StepCommonV3 { 281 StepCommonV3 {First 10 of 202 lines.
- 8 lines in 5 placesrust72 tokenscrates/bsk-cli/src/cli/console.rs:69–76crates/bsk-cli/src/cli/human_loop.rs:128–135crates/bsk-cli/src/cli/navigate.rs:278–285crates/bsk-cli/src/cli/waits.rs:75–82crates/bsk-cli/src/cli/waits.rs:167–174
69fn render(reply: &ConsoleResult, format: Format) -> Result<(), CliError> { 70 match format { 71 Format::Json => { 72 let json = serde_json::to_string_pretty(reply) 73 .map_err(|e| CliError::Local(anyhow::anyhow!(e)))?; 74 println!("{json}"); 75 } 76 Format::Human => { - 17 lines in 4 placesrust85 tokenscrates/bsk-protocol/src/tools/interaction.rs:100–116crates/bsk-protocol/src/tools/interaction.rs:146–162crates/bsk-protocol/src/tools/interaction.rs:181–197crates/bsk-protocol/src/tools/scroll.rs:9–25
100pub struct HoverParams { 101 pub session_id: String, 102 /// Optional `@e<N>` ref allocated by the last observation. 103 /// Mutually exclusive with `selector`. 104 #[serde( 105 rename = "ref", 106 alias = "ref_", 107 default, 108 skip_serializing_if = "Option::is_none" 109 )]First 10 of 17 lines.
7 more
- 42 lines in 2 placesrust240 tokens
- 31 lines in 2 placestypescript222 tokens
- 30 lines in 2 placesrust221 tokens
- 8 lines in 5 placesrust53 tokens
- 10 lines in 4 placesrust70 tokens
- 24 lines in 2 placesrust197 tokens
- 35 lines in 2 placesrust195 tokens
Largest clones over all files, tests and data included
- 275 lines in 2 placesmarkdowndocs and examples3,118 tokens
10# browser-skill 11 12Use `bsk` to work in an **Agent Window** with the user's existing logins. User tabs 13require explicit borrowing. This skill does not install the extension or handle 14advice-only tasks. Never extract credentials, cookies, tokens, or other secrets. 15 16## Before starting a session 17 18For remote setup or pairing, follow the [remote guide](https://github.com/Tencent/BrowserSkill/blob/main/docs/remote-extension-connection.md). 19First 10 of 275 lines.
- 980 lines in 2 placesjsondata files2,363 tokenscrates/bsk-protocol/schema/tool_record_await_result.json:3–982crates/bsk-protocol/schema/tool_record_stop_result.json:3–982
3"title": "RecordAwaitResult", 4"type": "object", 5"required": [ 6 "trace" 7], 8"properties": { 9 "trace": { 10 "$ref": "#/definitions/RecordedTrace" 11 } 12},First 10 of 980 lines.
- 901 lines in 2 placesjsondata files2,178 tokenscrates/bsk-protocol/schema/tool_record_await_result.json:82–982crates/bsk-protocol/schema/trace.json:71–971
82 } 83}, 84"RecorderInfo": { 85 "type": "object", 86 "required": [ 87 "bsk", 88 "vom" 89 ], 90 "properties": { 91 "bsk": {First 10 of 901 lines.
- 651 lines in 2 placesjsondata files1,588 tokens
- 61 lines in 4 placesrusttests500 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| rust | 99 | 34,663 | 179 | 2,125 | 6.13% |
| typescript | 188 | 43,814 | 57 | 718 | 1.64% |
| tsx | 26 | 5,375 | 4 | 48 | 0.89% |
| javascript | 25 | 2,776 | 2 | 22 | 0.79% |
| bash | 10 | 847 | 0 | 0 | 0% |
| powershell | 1 | 267 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 330 | 94,056 | 766 | 8,542 | 9.08% |
| rust | 135 | 47,755 | 408 | 5,268 | 11.03% |
| json | 112 | 13,589 | 85 | 7,395 | 54.42% |
| tsx | 41 | 8,773 | 32 | 339 | 3.86% |
| bash | 24 | 1,010 | 5 | 55 | 5.45% |
| yaml | 6 | 926 | 5 | 64 | 6.91% |
| markdown | 28 | 4,037 | 2 | 289 | 7.16% |
| javascript | 32 | 3,369 | 2 | 22 | 0.65% |
| css | 7 | 707 | 2 | 40 | 5.66% |
| text | 5 | 42 | 1 | 12 | 28.57% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Sep 19, 2026 | #4 | 5,432 (+1,306) | 734 | 175,439 | 1,308 | 12.55% | 3.31% | E 29.5 | fa953dc |
| Sep 18, 2026 | #4 | 4,467 (+1,302) | 723 | 171,433 | 1,285 | 12.71% | 3.38% | — | 75e2c64 |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.