Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/yan-labs/yan-skills/openclinpx skills add yan-labs/yan-skills --skill opencligit clone --depth 1 https://github.com/yan-labs/yan-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/yan-labs/yan-skills/opencli)<a href="https://agentmods.dev/skills/yan-labs/yan-skills/opencli"><img src="https://agentmods.dev/badge/skills/yan-labs/yan-skills/opencli.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00290 | $0.12695 |
| Opus 5 | $0.00145 | $0.06348 |
| Sonnet 5 | $0.00058 | $0.02539 |
| Haiku 4.5 | $0.00029 | $0.01269 |
Grade A, and why
opencli scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
| 「打开这个页面看看写了什么」(公开页) | **先不用** | 先问有没有 `curl` / 公开 API。只为读一段公开文本开浏览器是浪费 | How it starts
The opening of the file, as written. The whole thing — 663 lines — stays where its author put it; the contents beside it link to each section on GitHub.
OpenCLI
OpenCLI 把任意网站、Electron 桌面应用和外部 CLI 收敛成一条 opencli <site> <command>,
再加一条 opencli browser <session> <command> 用来现场驱动浏览器。
它走的是用户本机那个真实的、已登录的 Chrome(浏览器扩展 + 本地守护进程), 不是无痕实例、不是沙箱。这一个事实决定了本 Skill 里几乎所有规则。
本 Skill 面向的是我们自己维护的 fork(yan-labs/OpenCLI),和上游 jackwener/opencli
有差异,差异清单见 references/our-fork.md。
零、我遇到这种情况,该不该用 OpenCLI
本 Skill 是底层能力,不是业务流程。用户不会说「用 OpenCLI」,他会说下面左边那些话。 这张表回答的是「这句话该不该落到浏览器上」——判错方向的代价是拿到看起来正常、 内容却不同的数据,比慢一轮贵得多。
| 用户大概会这么说 | 该走哪条 | 为什么 |
|---|---|---|
| 「帮我登录后台查一下」「看我的 GSC / 数据面板」 | 用(opencli browser) |
需要身份。沙箱浏览器要么跳登录页,要么以匿名身份返回更少的字段、更低的配额 |
| 「这个站没有 API,把表格给我」 | 用,但先看第四节有没有 adapter | adapter 里封装过的坑,现场驱动要重踩一遍 |
| 「填一下这个表单」「帮我提交」 | 用,但提交动作归业务 Skill 管 | 本 Skill 只负责把浏览器开对;能不能按提交见 backlink 的三道闸 |
| 「打开这个页面看看写了什么」(公开页) | 先不用 | 先问有没有 curl / 公开 API。只为读一段公开文本开浏览器是浪费 |
| 「帮我调研一下 X」「搜搜大家怎么说」 | 不用 → agent-reach |
它已经做好多平台路由。本 Skill 不做「找信息」,只做「把数据取回来」 |
| 「查这个词的搜索量 / 难度」「看看竞品外链」 | 不用直接开浏览器 → 先进 rankup / backlink |
那两个 Skill 里已经有现成脚本,直接跑;现写等价实现是本阶梯第 1 级明令禁止的 |
| 「Semrush / Similarweb 上帮我看个数」 | 用,但先读配额纪律 | 见下面「配额站」一节:固定会话名 + 整轮持机器级工具锁。先跑 node <opencli-skill-dir>/scripts/pressure.mjs --tool semrush |
| 「开十个 agent 一起抓」 | 不要 | 扇出的单位是 agent,资源却是标签页。采集落盘(scripts/receiver.mjs),N 个 agent 读文件,站点侧并发度 0 |
| 「我的标签页被别人抢了」「读回来的页面不对」 | 用本 Skill 排障 | 先怀疑会话撞名,见第三节四条法律 |
| 「浏览器连不上 / doctor 报红 / 命令行为和文档不符」 | 用本 Skill 排障 | 第二节:先看扩展版本,商店版会让每条规则都对不上 |
| 「过一下验证码」 | 半自动 | 把前面全部做完,只把那一下点击留给用户,见第八节 |
一句话判据:无痕窗口打开它,还是不是同一个东西? 不是 → 必须走用户真实的 Chrome(也就是本 Skill);是 → 先找 API 或现成脚本。
一、先判断:这件事该不该用浏览器
动手之前先走这条阶梯,命中即停。 每一级往下的唯一理由是「上一级确实不存在」, 不是「我对下一级更熟」。跳级的代价不是慢,是拿到看起来正常但内容不同的数据。
| 级 | 手段 | 什么时候用 |
|---|---|---|
| 1 | 现成脚本 | 项目里、兄弟 Skill 里已经有的 .mjs。直接跑,不要现写等价实现 |
| 2 | HTTP / REST API(curl / fetch) |
没脚本但服务有 API。先用 API,跑通后固化成脚本 |
| 3 | opencli <site> <command> adapter |
目标站已有 adapter。opencli list | grep -i <site> 一眼就知道 |
| 4 | opencli browser <session> 现场驱动 |
没有 adapter,或 adapter 不覆盖这个动作 |
| 5 | 写一个新 adapter | 这个动作以后还要重复做。见 references/adapters.md |
What ships with it
18 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- evals/evals.json 2.4 KB
- references/adapters.md 13 KB
- references/browser-driving.md 15 KB
- references/data-extraction.md 15 KB
- references/drivers.md 5.8 KB
- references/our-fork.md 7.8 KB
- references/session-laws.md 24 KB
- references/troubleshooting.md 13 KB
- scripts/access-report.mjs 6.9 KB runs code
- scripts/daemon-restart-safe.mjs 3.4 KB runs code
- scripts/opencli-core.mjs 33 KB runs code
- scripts/pressure.mjs 19 KB runs code
- scripts/receiver.mjs 8.4 KB runs code
- scripts/session.sh 2.4 KB runs code
- skill.json 245 B
- tests/entrypoint-guard.test.mjs 1.8 KB runs code
- tests/pressure.test.mjs 12 KB runs code
- tests/quota-sites.test.mjs 7.6 KB runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday Changed · +17 lines c26a484d2de7
- 5d ago First seen · 646 lines · 290 tokens per session scan A 1508eb3a827d
opencli is a skill published in the GitHub repository yan-labs/yan-skills (169 stars, last pushed yesterday), licensed MIT. It adds 290 tokens to every session and 12,695 once invoked, about $0.0014 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
dingtalk_channel_connect
Use a headed browser to automatically complete DingTalk channel integration for QwenPaw. Applicable when the user mentions DingTalk, developer console, Client ID, Client Secret, bot, Stream mode, binding or configuring a channel. Supports pausing when a login page is detected and resuming after the user logs in.
browser_cdp
Use this skill when the user explicitly wants to connect to a running Chrome browser, scan local CDP ports, specify a cdpport, or share a single browser across multiple agents/tools. By default browser opens no debugging port; pass an explicit cdpport only when the user wants another local tool to attach.
browser_cdp
当用户明确希望连接到已运行的 Chrome 浏览器、扫描本地 CDP 端口、显式指定 cdpport,或让多个 agent / 工具共享同一个浏览器时,使用本 skill。browser 默认不开放调试端口;仅当用户明确希望其他本地工具附加时才显式传入 cdpport。.
browser_visible
当用户需要控制 browser 的浏览器启动方式时,使用本 skill。browser 默认由 Playwright 直接管理、不开放调试端口(需让其他本地工具附加时显式传 cdpport);headed 控制是否显示窗口,privatemode 保留用于兼容、不再改变默认行为,browserargs 传入额外的 Chromium 启动参数,executablepath 指定自定义浏览器可执行文件路径。.
browser_visible
Use this skill when the user needs to control the browser launch mode for browser. By default browser is managed by Playwright and opens no debugging port (pass an explicit cdpport to let another local tool attach); headed controls whether the window is visible, and privatemode is kept for backward compatibility and…
browser-testing-with-devtools
Tests in real browsers via Chrome DevTools MCP. Use when building or debugging anything that runs in a browser. Use when you need to inspect the DOM, capture console errors, analyze network requests, profile performance, or verify visual output with real runtime data. Requires the chrome-devtools MCP server to be…