Skip to content
项目

jackwener/OpenCLI has 30,901 GitHub stars and 3,032 forks. GitHot measured +26 stars in 24 hours. Last checked 2026-11-05 21:40 UTC. Last push 2026-10-26.

这些数字如何统计

将任何网站转换为 CLI,并让 AI 智能体使用已登录的浏览器。

实测星标增长

24小时
+26
7天
更新延迟
15天
更新延迟
1个月
更新延迟

各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。

README.zh-CN.md

原文

OpenCLI

把任意网站变成 CLI & 在你的登录态浏览器上跑 Browser Use。 把网站和浏览器会话,统一变成适合人类与 AI Agent 使用的确定性接口。 或者在任意页面上跑 Browser Use —— 导航、填表单、点击、抓取、自动化。

English npm Chrome Web Store Node.js Version License

OpenCLI 是 general-purpose browser automation CLI,可以作为 agent-browser 的替代工具。导航、检查页面、点击、填表、提取和截图无需 site adapter;内置 adapters 为重复任务提供可复用的确定性命令。参见 OpenCLI vs agent-browser 与迁移指南。

OpenCLI 可以用同一套 CLI 做三类事情:

  • 直接使用现成适配器:B站、知乎、小红书、Twitter/X、Reddit、HackerNews 等 100+ 站点 开箱即用。
  • 让 AI Agent 操作任意网站:在你的 AI Agent(Claude Code、Cursor 等)中安装 opencli-browser skill,Agent 就能用你的已登录浏览器导航、点击、输入/填充、提取任意网页内容。
  • 把新网站写成 CLI:用 opencli browser 原语 + opencli-adapter-author skill,从站点侦察、API 发现、字段解码到 opencli adapter test 一条龙。

Agent 命令约定

命令默认返回 JSON:{ "ok": true, "data": ... }。失败返回 { "ok": false, "error": { "code": "...", "message": "...", "hint": "..." } } 并设置非零 exit code。结果写入 stdout,日志写入 stderr。显式指定的展示格式、 help、version 和 completion 保留各自格式;browser follow 模式使用 JSON Lines。

opencli list search --site github
opencli browser open https://example.com --session research
opencli browser network --static --session research
opencli browser chrome describe
opencli adapter check github/search

list 返回精简的分页结果(commands、total、nextOffset),详细参数通过 <command> --help -f json 查询。页面操作使用 --session,native Chrome 调用无需 session。 adapter 开发入口统一为 adapter init|check|test;state --diagnostics 和 network --static 取代 analyze、discover。

本次调整改变 CLI 语法和 JSON 输出,JS adapter 的 cli({...})、func(args)、 func(page,args) 接口保持不变;adapter 的 defaultFormat 不再影响 CLI 默认格式。

快速开始

1. 安装 OpenCLI

如果你是在自己的电脑上使用,优先安装 OpenCLIApp。它会内置 OpenCLI runtime,帮你安装 / 修复受管理的 opencli 命令,并提供系统托盘 UI 来做环境诊断、更新、浏览器登录态保活和网页转 Markdown。

方式 A — OpenCLIApp(macOS / Windows 推荐): 从 https://opencli.info/download 下载最新版 App,安装后打开一次,在 System 页面安装或修复 opencli 命令。

方式 B — npm 全局安装(纯 CLI / CI / 服务器): 通过 npm 安装时,OpenCLI 要求 Node.js >= 20.18.1。

node --version
npm install -g @jackwener/opencli

2. 安装 Browser Bridge 扩展

OpenCLI 通过轻量 Browser Bridge 扩展和本地微型 daemon 与 Chrome/Chromium 通信。daemon 会按需自动启动。

方式 A — Chrome Web Store(推荐): 在 Chrome Web Store 安装 OpenCLI 扩展。

方式 B — 手动安装:

  1. 到 GitHub Releases 页面 下载最新的 opencli-extension-v{version}.zip。
  2. 解压后打开 chrome://extensions,启用 开发者模式。
  3. 点击 加载已解压的扩展程序,选择解压后的目录。

3. 验证环境

opencli doctor

4. 跑第一个命令

opencli list
opencli hackernews top --limit 5
opencli bilibili hot --limit 5

给人类用户

如果你只是想稳定地调用网站或桌面应用能力,主路径很简单:

  • opencli list 查看当前所有命令
  • opencli <site> <command> 调用内置或生成好的适配器
  • opencli doctor 处理浏览器连通性问题

扩展 OpenCLI

如果你想新增自己的命令,先看 扩展 OpenCLI。README 只保留入口;目录结构、源码管理方式和安装命令放在文档里。

需求 推荐路径
把个人网站命令放在自己的 Git repo opencli plugin create + opencli plugin install file://...
快速写一个本机私人 adapter opencli adapter init <site>/<command>,放在 ~/.opencli/clis/
本地修改官方 adapter opencli adapter eject <site> + opencli adapter reset <site>
发布或安装第三方命令 opencli plugin install github:user/repo

给 AI Agent

OpenCLI 的 browser 命令是给 AI Agent 用的——不是手动执行的。把 skill 安装到你的 AI Agent(Claude Code、Cursor 等)中,Agent 就能用你的已登录 Chrome 会话替你操作网站。

安装 skill(同时也用于更新)

npx skills add jackwener/opencli

或只装需要的 skill:

npx skills add jackwener/opencli --skill opencli-adapter-author
npx skills add jackwener/opencli --skill opencli-autofix
npx skills add jackwener/opencli --skill opencli-browser
npx skills add jackwener/opencli --skill opencli-usage

选择哪个 skill

Skill 适用场景 你对 AI Agent 说的话
opencli-adapter-author 为新站点写可复用适配器,或给已有站点添加命令 "帮我做一个抖音热门的适配器" / "帮我做一个抓取这个页面热帖的命令"
opencli-autofix 内置命令失败时修复已有适配器 "opencli zhihu hot 返回空了,修一下"
opencli-browser 实时驱动 Chrome 页面——导航、填表单、点击、抓取 "帮我看看小红书的通知" / "帮我填一下这个表单" / "用浏览器命令抓取这个页面"
opencli-usage 所有命令和站点的快速参考 "OpenCLI 有哪些 Twitter 相关的命令?"

工作原理

安装 opencli-browser skill 后,你的 AI Agent 可以:

  1. 导航到任意 URL,使用你的已登录浏览器
  2. 读取页面内容——通过结构化 DOM 快照(不是截图)
  3. 交互——点击按钮、填写表单、选择选项、按键
  4. 提取页面数据或拦截网络 API 响应
  5. 等待元素、文本或页面跳转

Agent 在内部自动处理所有 opencli browser 命令——你只需用自然语言描述想做的事。

Skill 参考文档:

browser 可用命令包括:open、state、click、type、fill、select、keys、wait、get、find、extract、frames、screenshot、scroll、back、eval、network、tab list、tab new、tab select、tab close、chrome describe、chrome call、close。

opencli browser 命令通过 --session <name> 指定页面 session。opencli browser --session work open <url> 和 opencli browser --session work tab new [url] 都会返回 target ID。opencli browser --session work tab list 用来查看当前已存在 tab 的 target ID,再通过 --tab <targetId> 把命令明确路由到某个 tab。tab new 只会新建 tab,不会改变默认浏览器目标;只有显式执行 tab select <targetId>,才会把该 tab 设为同一 session 后续未指定 target 的默认目标。

为新站点写适配器

当你需要的网站还没覆盖时,用 opencli-adapter-author skill,全流程:

  1. 侦察站点,分类 pattern(SPA / SSR / JSONP / Token / Streaming)
  2. 发现 endpoint——network 精读、initial state、bundle 搜索、token 溯源,或 interceptor 兜底
  3. 定认证——PUBLIC / COOKIE / INTERCEPT / UI / LOCAL
  4. 字段解码 + 设计输出列
  5. opencli browser recon analyze <url> → opencli browser recon init <site>/<name> → 写适配器 → opencli browser recon verify <site>/<name>
  6. 站点知识沉到 ~/.opencli/sites/<site>/,下次同站点直接吃缓存

配置

变量 默认值 说明
OPENCLI_WINDOW 命令默认值 设为 foreground 或 background 来覆盖 Browser Bridge 窗口位置。浏览器型命令也支持 --window <foreground|background>
OPENCLI_SITE_SESSION adapter 默认值 设为 ephemeral 或 persistent,覆盖浏览器型 adapter 命令的 siteSession 元数据。ephemeral 会在命令结束时释放一次性标签页,自动化窗口会保留为可复用的容器;persistent 会复用该站点的 session。命令级 --site-session 优先。
OPENCLI_CLOSE_OWNED_TAB 0 设为 1,显式关闭会话或一次性 adapter 清理时关闭当前租约拥有的标签,不保留空白占位页。需要支持此功能的 Browser Bridge 扩展。
OPENCLI_SITE_SLOTS — 把站点放进常驻标签页池,例如 xiaohongshu:1:1500-3000,weibo:2(站点:池大小[:最小毫秒[-最大毫秒]])。每次命令运行独占借用一个槽位标签页(读命令也一样),全忙时排队;可选的间隔会以随机抖动的延迟拉开相邻两次运行。所有标签页共用一个自动化窗口,只有活动标签页会渲染,因此 池大小 > 1 时,依赖渲染的命令(懒加载列表)在后台槽位上可能卡住——这类命令和有风控的站点请用 1。--site-session ephemeral 可让单次调用不走池。
OPENCLI_BROWSER_CONNECT_TIMEOUT 45 浏览器连接超时(秒)
OPENCLI_BROWSER_COMMAND_TIMEOUT 60 单个浏览器命令超时(秒)
OPENCLI_BROWSER_IDLE_TIMEOUT 扩展默认值 owned session 的 idle timeout(秒),命令级 idleTimeout 优先。不延长显式清理时间:ephemeral adapter 通常在命令结束时释放 tab;bound tab 和 persistent adapter session 忽略 idle timeout。释放 session 后,可复用的 window container 仍保留。
OPENCLI_CDP_ENDPOINT — Chrome DevTools Protocol 端点,用于远程浏览器
OPENCLI_CDP_TARGET — 按 URL 子串过滤 CDP target(如 detail.1688.com)
OPENCLI_VERBOSE false 启用详细日志(-v 也可以)
DEBUG_SNAPSHOT — 设为 1 输出 DOM 快照调试信息

Browser Bridge daemon 与扩展的通信端口固定为 localhost:19825,不再支持通过 OPENCLI_DAEMON_PORT 配置自定义端口。

opencli browser * 通过 --session <name> 指定页面 session,默认使用前台窗口,并保留该 session 的 tab lease,直到你手动执行 opencli browser --session <session> close 或等空闲超时。浏览器型 adapter 默认使用后台 adapter 窗口并在命令结束后释放一次性 tab lease;如果需要调试最终页面,可以传 --window foreground --keep-tab true。

内置命令

运行 opencli list 查看完整注册表。

站点 命令
xiaohongshu search ask note comments notifications feed user saved liked download publish follow unfollow creator-notes creator-note-detail creator-notes-summary creator-profile creator-stats
bilibili hot search me favorite history feed subtitle summary video comments dynamic ranking following follow unfollow user-videos download creator-stats
zhihu hot search question download follow like favorite comment answer
hackernews top new best ask show jobs search user
hltv search player-summary player-matches player-form player-map-pool player-vs-team player-teammate-impact player-duel match-map match-series team-matches team-map-pool event-matches
geogebra eval add-point add-line add-circle add-polygon triangle hexagon list info
linkedin connect inbox job-detail jobs-preferences post-analytics posts profile-experience profile-projects profile-read profile-analytics safe-send search people-search services-read sent-invitations thread-snapshot timeline salesnav-search salesnav-inbox salesnav-message salesnav-thread
reddit hot frontpage popular search subreddit read user user-posts user-comments upvote save comment subscribe saved upvoted
twitter trending search timeline tweets lists list-tweets list-create list-delete list-add list-add-batch list-remove list-remove-batch bookmarks profile thread following followers notifications post reply delete like likes article follow unfollow bookmark unbookmark download accept reply-dm block unblock hide-reply
claude ask send new status read history detail
gemini new ask image deep-research deep-research-result
notebooklm status list open current get history summary note-list notes-get source-list source-get source-fulltext source-guide
amazon bestsellers search product offer discussion movers-shakers new-releases rankings
upwork search feed detail
slock message-send message-read message-search channel-list channel-info channel-create channel-members channel-join task-list task-create task-claim task-status task-convert task-delete thread-list thread-follow attachment-upload attachment-download bookmark-add inbox dm-list server-list server-use whoami
huodongxing events
midjourney login whoami settings quota generate describe history status action download

精选清单 — → 查看全部 100+ 站点和命令(小红书 / B站 / 知乎 / Twitter / Reddit / 抖音 / 微博 / 微信读书 / 小宇宙 / 1688 / 夸克 / Spotify / 牛客 / arxiv / Chess.com / Bilibili / 等)。

下载支持

OpenCLI 支持从各平台下载图片、视频和文章。

支持的平台

平台 内容类型 说明
小红书 图片、视频 下载笔记中的所有媒体文件
B站 视频 需要安装 yt-dlp
Twitter/X 图片、视频 从用户媒体页或单条推文下载
Pixiv 图片 下载原始画质插画,支持多页作品
1688 图片、视频 下载商品页中可见的商品素材
小宇宙 音频、转录 使用本地凭证下载单集音频和转录 JSON / 文本
知乎 文章(Markdown) 导出文章,可选下载图片到本地
微信公众号 文章(Markdown) 导出微信公众号文章为 Markdown
豆瓣 图片 下载电影条目的海报 / 剧照图片

前置依赖

下载流媒体平台的视频需要安装 yt-dlp:

# 安装 yt-dlp
pip install yt-dlp
# 或者
brew install yt-dlp

使用示例

# 下载小红书笔记中的图片/视频
opencli xiaohongshu download "https://www.xiaohongshu.com/search_result/<id>?xsec_token=..." --output ./xhs
opencli xiaohongshu download "https://xhslink.com/..." --output ./xhs
opencli rednote download "https://www.rednote.com/search_result/<id>?xsec_token=..." --output ./rednote

# 下载B站视频(需要 yt-dlp)
opencli bilibili download BV1xxx --output ./bilibili
opencli bilibili download BV1xxx --quality 1080p  # 指定画质

# 下载 Twitter 用户的媒体
opencli twitter download elonmusk --limit 20 --output ./twitter

# 下载单条推文的媒体
opencli twitter download --tweet-url "https://x.com/user/status/123" --output ./twitter

# 下载豆瓣电影海报 / 剧照
opencli douban download 30382501 --output ./douban

# 下载 1688 商品页中的图片 / 视频素材
opencli 1688 download 841141931191 --output ./1688-downloads

# 下载小宇宙单集音频
opencli xiaoyuzhou download 69b3b675772ac2295bfc01d0 --output ./xiaoyuzhou

# 下载小宇宙单集转录
opencli xiaoyuzhou transcript 69dd0c98e2c8be31551f6a33 --output ./xiaoyuzhou-transcripts

# 导出知乎文章为 Markdown
opencli zhihu download "https://zhuanlan.zhihu.com/p/xxx" --output ./zhihu

# 导出并下载图片
opencli zhihu download "https://zhuanlan.zhihu.com/p/xxx" --download-images

# 导出微信公众号文章为 Markdown
opencli weixin download --url "https://mp.weixin.qq.com/s/xxx" --output ./weixin

opencli xiaoyuzhou download 和 transcript 需要本地小宇宙凭证:~/.opencli/xiaoyuzhou.json。

输出格式

所有内置命令都支持 --format / -f,可选值为 table、json(默认)、yaml、md、csv。 list 命令也支持同样的格式参数,同时继续兼容 --json。

opencli list -f yaml            # 用 YAML 列出命令注册表
opencli bilibili hot -f table   # 默认:富文本表格
opencli bilibili hot -f json    # JSON(适合传给 jq 或者各类 AI Agent)
opencli bilibili hot -f yaml    # YAML(更适合人类直接阅读)
opencli bilibili hot -f md      # Markdown
opencli bilibili hot -f csv     # CSV
opencli bilibili hot -v         # 详细模式:展示管线执行步骤调试信息

退出码

opencli 遵循 Unix sysexits.h,CI / 脚本可按失败模式分支:0 成功、66 无数据、69 Browser Bridge 未连接、75 超时、77 需要认证、78 配置错误、130 Ctrl-C。完整参考:docs/zh/guide/exit-codes.md。

插件

通过社区贡献的插件扩展 OpenCLI。插件使用与内置命令相同的 JS 格式,启动时自动发现。

opencli plugin install github:user/opencli-plugin-my-tool  # 安装
opencli plugin list                                         # 查看已安装
opencli plugin update my-tool                               # 更新到最新
opencli plugin update --all                                 # 更新全部已安装插件
opencli plugin uninstall my-tool                            # 卸载

当 plugin 的版本被记录到 ~/.opencli/plugins.lock.json 后,opencli plugin list 也会显示对应的短 commit hash。

Albato、Goofish 和 Taobao 需要从本地 adapter 子目录安装,见安装说明。

插件 类型 描述
opencli-plugin-albato JS Albato 自动化工作流管理:方案查看、启停控制、失败诊断与重试
opencli-plugin-amap JS 高德地图收藏地点与路线导出、坐标转换 (GCJ-02/WGS-84) 与 SSR 搜索
opencli-plugin-github-trending JS GitHub Trending 仓库
opencli-plugin-goofish JS 闲鱼买家订单、收藏夹、私信消息、个人资料、商品搜索与交易履约统计
opencli-plugin-hot-digest JS 多平台热榜聚合
opencli-plugin-juejin JS 稀土掘金热门文章
opencli-plugin-taobao JS 淘宝买家聊天记录、历史订单、已购店铺、收藏夹与基于关键词的聊天摘要
opencli-plugin-vk JS VK (VKontakte) 动态、信息流和搜索
opencli-plugin-x-article-publisher JS 通过 OpenCLI 与 xPoster 将带本地图片的 Markdown 发布为 X 长文

详见 插件指南 了解如何创建自己的插件。

常见问题排查

  • "Extension not connected" 报错
    • 确保你已从 Chrome Web Store 安装 OpenCLI 扩展,且在 chrome://extensions 中已启用。
  • "attach failed: Cannot access a chrome-extension:// URL" 报错
    • 其他 Chrome/Chromium 扩展(如 youmind、New Tab Override 或 AI 助手类扩展)可能产生冲突。请尝试暂时禁用其他扩展后重试。
  • 返回空数据,或者报错 "Unauthorized"
    • Chrome/Chromium 里的登录态可能已经过期。请打开当前页面,在新标签页重新手工登录或刷新该页面。
  • Node API 错误 / 缺少 fetch / 旧 Node 启动即崩
    • OpenCLI 要求 Node.js >= 20.18.1。先执行 node --version,如果版本过低先升级,再重试命令。
  • Daemon 问题
    • 检查 daemon 状态:curl localhost:19825/status
    • 查看扩展日志:curl localhost:19825/logs

Star History

License

Apache-2.0

任务完成后关闭临时标签页

设置 export OPENCLI_CLOSE_OWNED_TAB=1 后,一次性 adapter 命令结束时会关闭 当前租约拥有的标签;多步浏览器任务结束时执行 opencli browser close --session <session>。 最后一个标签关闭后 Chrome 会自动关闭窗口,用户已有页面、其他会话和绑定的用户标签 都会保留。默认的窗口复用策略、空闲回收、--keep-tab true 和持久站点会话不变; 需要让默认持久化的 adapter 单次运行后清理时,可加 --site-session ephemeral。

清理使用独立 action,旧扩展会在释放租约前拒绝请求。清理失败或扩展过旧时会单独 输出警告,保留身份信息。可重试显式浏览器清理,或手动关闭残留的一次性 adapter 标签;不要重复已经完成的网站写入。显式 browser close 会报错退出;一次性 adapter 仍可能返回 已经完成的操作结果。

探索相关项目