1. 写在最前面
最近在折腾 AI 编程工具的时候,笔者越来越觉得一个问题很关键:AI 如果只能回答问题,其实价值是有限的;如果它能够稳定地调用工具、读取网页、拿到结构化数据,那它才更像一个能干活的助手。
以前让 AI 查一个网站内容,基本就是两条路:
-
让它自己搜索,然后赌搜索结果是新的、准的。
-
让它操作浏览器,然后赌它不会点错、看错、理解错。
这两条路都有点不稳定。刚好最近看到了 OpenCLI,它的定位很有意思:把网站、浏览器会话、Electron 应用和本地工具,都包装成确定性的 CLI 接口。
第一次看到这个项目的时候,笔者的反应其实是:这不就是一堆网站命令的集合吗?但实际跑了一圈以后,发现它真正想解决的问题不是"多几个命令",而是给人和 AI Agent 提供一个统一、可脚本化、可复用的工具入口。
注:本文基于 OpenCLI 官方仓库和笔者本机实测整理。本机版本为
opencli 1.7.20,Node 版本为v24.4.1。项目更新较快,具体命令建议以opencli list和官方文档为准。
2. OpenCLI 是什么
2.1 一句话理解
OpenCLI 做的事情可以简单理解为:把原本需要打开网页、点击按钮、复制结果的操作,变成一条可以稳定执行的命令。
比如以前想看 Hacker News 热门内容,需要打开网站、浏览页面、复制标题。使用 OpenCLI 后,可以直接:
bash
opencli hackernews top --limit 5
如果想看 B 站热门,也可以直接:
bash
opencli bilibili hot --limit 5
这个变化看起来不大,但对 AI Agent 来说很重要。因为浏览器页面是给人看的,结构不稳定;CLI 输出是给程序看的,结构更稳定,也更容易被 AI 后续处理。
2.2 它主要解决三类问题
从使用角度看,OpenCLI 主要有三类能力:
-
网站适配器:把 Bilibili、Zhihu、Xiaohongshu、Reddit、Hacker News 等网站变成命令。
-
浏览器自动化:通过浏览器桥接扩展,让 AI Agent 可以复用你已经登录的 Chrome 会话。
-
本地工具统一入口 :把
gh、docker、obsidian、tg、discord等本地 CLI 统一挂到opencli下。
笔者觉得最有价值的是前两点。第一点适合人直接用,第二点适合 AI Agent 用。尤其是当一个网站没有公开 API,但你又想让 AI 去帮你查东西时,OpenCLI 的浏览器桥接就比较有想象空间了。
3. 安装和环境检查
3.1 安装 CLI
OpenCLI 要求 Node.js 版本不低于 21。笔者本机已经满足要求:
bash
node --version
v24.4.1
安装命令如下:
bash
npm install -g @jackwener/opencli
安装后可以查看版本:
bash
opencli --version
1.7.20
3.2 安装浏览器桥接扩展
如果只使用公开数据类命令,比如 hackernews、wttr,不一定需要浏览器扩展。但如果要操作 B 站、小红书、Twitter/X 这类依赖登录态的网站,就需要安装 Browser Bridge 扩展。
官方提供了两种方式:
-
从 Chrome Web Store 安装 OpenCLI 扩展。
-
从 GitHub Releases 下载扩展压缩包,然后在
chrome://extensions中手动加载。
安装完以后,使用下面的命令检查:
bash
opencli doctor
笔者本机的结果如下:
text
opencli v1.7.20 doctor (node v24.4.1)
[OK] Daemon: running on port 19825 (v1.7.20)
[OK] Extension: connected (v1.0.12)
[OK] Connectivity: connected in 3.5s
Everything looks good!
注:如果这里提示 Extension 没有连接,大概率不是 OpenCLI 命令的问题,而是浏览器扩展没有装好、Chrome 没打开,或者当前 Profile 没连上。
3.3 多 Profile 支持
如果你有多个 Chrome Profile,比如工作账号、个人账号、测试账号,就可以给不同 Profile 起别名:
bash
opencli profile list
opencli profile rename <contextId> work
opencli profile use work
后续可以显式指定:
bash
opencli --profile work bilibili hot --limit 5
这点对 AI Agent 很重要。因为如果工具随便猜一个浏览器 Profile,就很容易出现"命令能跑,但是拿不到登录态"的问题。
4. 实测几个命令
4.1 查看可用命令
OpenCLI 的第一个入口应该是:
bash
opencli list
它会列出当前可用的所有站点和命令。笔者本机输出非常长,截取一小段大概是这样的:
text
opencli --- available commands
36kr
hot [public] --- 36氪热榜
news [public] --- Latest tech/startup news from 36kr
bilibili
hot [cookie] --- B站热门视频
search [cookie] --- Bilibili 搜索
hackernews
top [public] --- Hacker News top stories
这个列表有两个信息值得注意:
-
[public]通常表示不依赖浏览器登录态,直接就能跑。 -
[browser]、[cookie]、[intercept]通常表示会依赖浏览器、登录态或网络请求拦截。
所以笔者现在会先看 opencli list,确认目标命令的模式,再决定是不是需要先检查浏览器扩展。
4.2 查 Hacker News 热门
先跑一个不依赖登录态的命令:
bash
opencli hackernews top --limit 3 -f json
简化后的返回如下:
json
[
{
"rank": 1,
"title": "Mullvad exit IPs are surprisingly identifying",
"score": 316,
"author": "RGBCube",
"comments": 163,
"url": "https://tmctmt.com/posts/mullvad-exit-ips-as-a-fingerprinting-vector/"
}
]
这个输出就很适合继续交给 AI 总结。因为它不是一整页 HTML,也不是截图,而是字段清晰的 JSON。
这也是 OpenCLI 和普通浏览器操作最大的区别:它把网页里的信息提前整理成了稳定字段。
4.3 查天气
原来笔者以为会有一个 opencli weather beijing 之类的命令,但实际看适配器列表后发现,现在天气相关命令是挂在 wttr 下面:
bash
opencli wttr current beijing -f json
笔者本机返回如下:
json
[
{
"location": "Beijing",
"country": "China",
"tempC": 23,
"description": "Overcast",
"humidity": 69,
"windKmph": 11
}
]
这个例子也提醒了笔者一件事:OpenCLI 这种项目更新会比较快,写文章时不能只凭感觉猜命令,最好直接 opencli list 或查官方适配器列表。
注:不然文章里写得信誓旦旦,读者一复制发现命令不存在,那就有点尴尬了。
4.4 查 B 站热门
B 站热门命令在笔者本机也能跑通,前提是浏览器桥接正常:
bash
opencli bilibili hot --limit 3 -f json
返回内容大概是:
json
[
{
"rank": 1,
"title": "热烈欢迎曲家瑞!10年以上的好物,她竟然带来了这------么多!!",
"author": "papi酱",
"play": 865923,
"danmaku": 23359,
"bvid": "BV1CX546QENE",
"url": "https://www.bilibili.com/video/BV1CX546QENE"
}
]
从体验上看,这类命令适合做两件事:
-
快速看热门内容,不用打开网页。
-
给 AI 一个结构化输入,让它继续做摘要、分类或筛选。
比如可以先用 OpenCLI 拉取 B 站热门,再让 AI 按"技术、生活、娱乐、新闻"分类。这样比让 AI 自己去网页上看,要稳定得多。
4.5 浏览器自动化命令
OpenCLI 也提供底层浏览器命令,不过官方文档里说得很明确:这部分主要是给 AI Agent 用的,不是给人手敲的。
现在的浏览器命令需要带一个 session 名称,比如:
bash
opencli browser work state
opencli browser work open https://example.com
opencli browser work tab list
opencli browser work close
笔者本机执行:
bash
opencli browser work state
返回结果大概是:
text
url: about:blank
viewport: 1920x936
interactive: 0 | iframes: 0
这个能力单独看并不惊艳,因为人手敲浏览器命令其实挺累的。但如果交给 AI Agent,就变成了另一回事:AI 可以打开网页、读取 DOM、点击按钮、填写表单、提取内容,最后再把这些动作固化成一个适配器。
也就是说,OpenCLI 的浏览器命令更像是一套"网页自动化原语",人不一定直接用,但 AI Agent 很适合用。
5. OpenCLI 的真正价值
5.1 对人来说:少打开一些网页
如果只是把 OpenCLI 当成人用的命令行工具,它的价值也很直接:
-
查公开数据更快,比如 Hacker News、天气、包信息、论文信息。
-
查平台热门更方便,比如 B 站、小红书、知乎、Reddit。
-
输出格式统一,可以直接转成
json、csv、yaml、md。
OpenCLI 支持的输出格式比较完整:
bash
opencli bilibili hot -f json
opencli bilibili hot -f csv
opencli bilibili hot -f yaml
opencli bilibili hot -f md
这点对笔者来说挺实用。因为很多时候不是想"看网页",而是想"拿到数据以后继续处理"。
5.2 对 AI 来说:少一点玄学操作
对 AI Agent 来说,OpenCLI 的价值更大。
普通浏览器自动化有几个问题:
-
页面结构复杂,AI 容易读错。
-
按钮位置变化,AI 容易点错。
-
输出是自然语言描述,后续处理不稳定。
OpenCLI 做的事情,是把这些不稳定因素尽量提前封装掉。AI 不需要每次都重新理解网页,只需要调用已经适配好的命令。
比如:
bash
opencli bilibili hot --limit 10 -f json
返回的就是一组结构化字段。AI 后面要做摘要、排序、筛选,就会简单很多。
5.3 对长期使用来说:可以沉淀成适配器
OpenCLI 不只是内置了一批命令,还支持扩展:
-
临时私有适配器可以放在
~/.opencli/clis/。 -
长期维护的个人命令可以做成本地 plugin。
-
第三方插件可以通过
opencli plugin install github:user/repo安装。
比如官方插件文档里的 GitHub Trending 插件,是这样安装和使用的:
bash
opencli plugin install github:ByteYue/opencli-plugin-github-trending
opencli github-trending repos --limit 10
这和笔者之前理解的 opencli github trending 不一样。这里再次说明:OpenCLI 的命令面比较灵活,有些能力是内置适配器,有些能力来自插件,不能想当然地拼命令。
6. 适合和不适合的场景
6.1 适合的场景
笔者觉得 OpenCLI 适合这些情况:
-
需要频繁从网站拿结构化数据:比如热门榜单、搜索结果、文章列表。
-
想让 AI Agent 操作网站:尤其是需要复用浏览器登录态的场景。
-
希望把重复网页操作沉淀成命令:一次适配,多次复用。
-
想统一本地 CLI 工具入口 :比如
gh、docker、obsidian都通过opencli暴露给 AI。 -
需要脚本化处理网页结果:比如定时拉取、过滤、汇总、生成 Markdown。
6.2 不太适合的场景
但它也不是万能的。
-
如果只是偶尔打开一个网页看一眼,直接浏览器更快。
-
如果目标网站已经有成熟官方 API,直接调 API 可能更稳。
-
如果网站强依赖复杂交互,适配器维护成本可能不低。
-
如果只是人手动使用底层
opencli browser命令,体验并不轻松。
所以笔者对它的定位是:它不是替代浏览器,而是把高频、重复、可结构化的网站操作,从浏览器里抽出来。
7. 碎碎念
啦啦啦,终于把 OpenCLI 这篇重新捋了一遍。相比第一次整理时把功能全都堆上来,笔者现在更愿意把它理解成一个"给 AI Agent 准备的工具入口"。
如果只是站在人的角度看,它就是一个挺方便的 CLI 工具;但如果站在 AI Agent 的角度看,它的意义会更明显:网页是给人看的,命令是给程序用的,结构化输出才是 AI 后续稳定干活的基础。
当然,OpenCLI 这种工具也有一个现实问题:网站会变,适配器也会坏。所以它真正适合的不是"写一次永远不管",而是把常用场景沉淀下来,然后持续维护。
注:工具的价值不在于看起来多厉害,而在于它能不能在你真的需要偷懒的时候,稳定地帮你偷懒。
-
搞清楚工具解决什么问题,比背一堆命令更重要。
-
能自动化的事情就不要反复手动做,人的耐心应该留给更重要的判断。
-
如果 AI 终究要替我们干活,那我们现在要学的,可能就是如何把活拆成它能稳定执行的样子。