一天一个开源项目(第74篇):OpenCLI - 把任意网站变成零成本 CLI 工具的 AI Agent 基础设施

张开发
2026/4/15 22:16:38 15 分钟阅读

分享文章

一天一个开源项目(第74篇):OpenCLI - 把任意网站变成零成本 CLI 工具的 AI Agent 基础设施
引言“AI 在生成阶段消耗智能在执行阶段不消耗。”这是「一天一个开源项目」系列的第 74 篇文章。今天介绍的项目是OpenCLIGitHub。让 AI Agent 操作浏览器目前主流方案是每次都让 LLM 实时理解页面 DOM 或截图再决定怎么点击。这种方式有两个根本问题每次执行都要消耗大量 token且结果不稳定——同一个操作模型可能今天成功、明天因为页面微小变动就失败。OpenCLI的思路完全不同先生成后执行。用 AI 一次性为某个网站生成一个确定性的 CLI Adapter之后每次执行这个 Adapter 时完全不需要调用 LLM——成本是零稳定性是 100%。更关键的是OpenCLI 通过 Chrome Extension 复用用户已登录的真实 Chrome 会话账号凭证永远不会暴露给外部系统。15.6k Stars来自 Apache Arrow/DataFusion PMC 成员jackwener的作品是目前 AI Agent 工具链基础设施赛道最值得关注的开源项目之一。你将学到什么OpenCLI 的核心理念「编译期智能 vs 运行期智能」的系统设计哲学CDPChrome DevTools Protocol驱动真实 Chrome 会话的技术实现Adapter 生命周期探索 → 合成 → 生成 → 级联验证Self-Repair ProtocolAdapter 自动修复机制91 个内置 Adapter 的使用方式 为新网站生成 Adapter前置知识了解 CLI 工具的基本使用基本的 TypeScript / Node.js 知识可选用于理解源码了解 AI Agent 的基本概念项目背景项目简介OpenCLI 的完整定位是将网站、浏览器会话、Electron 应用和本地工具转化为确定性 CLI 接口同时服务于人类用户和 AI Agent。这句话包含了三个关键词确定性DeterministicAdapter 执行结果可预测不依赖 LLM 随机性CLI 接口任何 AI Agent 都能通过标准 Shell 命令调用人类 AI 双场景既可以作为日常命令行工具也可以作为 AI Agent 的工具层项目的哲学来自数据库领域的核心思想——查询优化在编译期查询规划消耗算力做最优决策运行期查询执行按计划高效执行不在运行时再做昂贵决策。OpenCLI 将这个思路迁移到 Web 自动化领域。作者介绍作者jackwener真名 jakevin地点杭州中国GitHub 粉丝2,200PMC 成员 CommitterApache Arrow、Apache DataFusion、Apache Doris工作经历MegaETH、SelectDBClickHouse 国内厂商、ByteDance RDS、NebulaGraph技术专长数据库查询引擎、Rust、Java、Go、Python、C相关项目opencode-iosiOS 端 AI 编程助手jackwener 是资深数据库 / 基础设施工程师OpenCLI 是他跨界 AI Agent 工具链的代表作其系统设计思维明显受数据库领域影响——「确定性执行」「一次编译多次运行」都是典型的数据库优化思想。项目数据⭐GitHub Stars: 15,600Forks: 1,500Open Issues: 39Open PRs: 49总提交: 845最新版本: v1.7.02026 年 4 月 11 日License: Apache 2.0内置 Adapters: 91 个主要功能核心作用当前 AI Agent 与 Web 交互面临两个根本矛盾问题一运行时成本传统方案Browser Use / Stagehand 等 任务执行 → LLM 分析 DOM → LLM 决策点击位置 → LLM 验证结果 → LLM... 每次执行消耗大量 token100 次执行 100 次 LLM 调用 OpenCLI 方案 [一次] 生成 Adapter消耗 LLM→ 写入 .js 文件 [多次] 执行 Adapter零 LLM纯 JS 确定性执行 100 次执行 1 次 LLM 调用问题二账号安全传统爬虫 / 自动化方案 浏览器控制程序需要 Cookie / 密码 → 凭证暴露给代码 → 安全风险 OpenCLI 方案 Browser Bridge Extension 连接用户正在运行的 Chrome → 复用已登录会话 → 凭证从不离开浏览器 → 账号就像普通用户在操作使用场景AI Agent 的稳定工具层为 Claude Code、Codex 等 AI 工具提供可靠的 Web 操作接口代替不稳定的每次截图让 LLM 分析方案日常命令行效率工具opencli bilibili trending | head -10实时获取 B 站热榜opencli twitter search AI agent --format csv output.csv导出搜索结果私有网站自动化为公司内网应用、个人常用网站生成 CLI 接口实现数据提取和操作自动化Electron 桌面应用控制通过 CDP 驱动 Cursor、Notion、Discord、ChatGPT Desktop 等 Electron 应用执行自动化操作CI/CD 数据采集标准 Unix exit codes 使 OpenCLI 可无缝接入 CI/CD pipeline自动化获取竞品数据、监控指标等快速开始# 1. 全局安装 OpenCLInpminstall-gjackwener/opencli# 2. 克隆仓库加载 Browser Bridge Chrome 扩展gitclone https://github.com/jackwener/OpenCLI.git# 打开 chrome://extensions# 开启「开发者模式」# 点击「加载已解压的扩展程序」→ 选择 extension/ 目录# 3. 验证连接状态opencli doctor# 4. 立即使用内置 Adapteropencli bilibili trending--formatjson opencli bilibili searchRust 教程--limit20opencli browser screenshot--urlhttps://github.com# 5. 为 AI Agent 安装 Skillsnpx skillsaddjackwener/opencli内置 Adapter 一览91 个内置 Adapter 覆盖主流平台分类支持平台视频Bilibili、YouTube社交Twitter/X、GitHub搜索Bing、DuckDuckGo新闻Hacker News、Product Hunt购物多平台本地工具Obsidian、Docker通过 CLI Hub三大操作模式模式一内置 Adapter 直接执行# 获取 Bilibili 热榜JSON 格式输出opencli bilibili trending--formatjson# 搜索 GitHub 仓库opencli github searchreact hooks--sortstars--limit20# 输出格式支持json / csv / yaml / markdown / tableopencli hacker-newstop--formattable模式二实时浏览器控制# 截图opencli browser screenshot--urlhttps://example.com--output./screenshot.png# 点击元素opencli browser click--selector#submit-button# 输入文本opencli browsertype--selectorinput[namesearch]--textOpenCLI# 执行 JS 脚本opencli browsereval--scriptdocument.title# 网络请求抓包opencli browser network--urlhttps://api.example.com模式三Adapter 生成核心功能# 探索模式录制浏览行为分析页面结构opencli explore https://some-new-website.com# 合成从录制行为生成 Adapter 草稿opencli synthesize# 生成并验证AI 辅助生成 自动测试验证opencli generate--urlhttps://some-new-website.com--action获取文章列表# 级联验证自动发现认证策略OAuth/Cookie/2FAopencli cascade项目优势对比维度OpenCLIBrowser UseStagehandPlaywright运行时 LLM 成本✅ 零❌ 每次调用❌ 部分调用✅ 零账号安全✅ 复用已登录 Chrome❌ 需注入凭证❌ 需注入凭证❌ 需手动管理AI Agent 友好✅ 原生 Skills✅ 直接用✅ 直接用需包装执行稳定性✅ 确定性❌ LLM 随机性中✅ 高自我修复✅ Self-Repair Protocol靠 LLM 重试无无学习成本低CLI 直接用中Python API中TS API高需写脚本为什么选择 OpenCLI成本最优只在生成 Adapter 时消耗 LLM后续执行成本归零安全最优凭证永远不离开本地浏览器稳定最优确定性执行不受模型版本更新影响数据库工程师设计System-level 思维Self-Repair Protocol 等设计严谨项目详细剖析整体架构OpenCLI 的架构分为四层核心是 Browser Bridge Extension 和 CDP 协议┌─────────────────────────────────────────┐ │ AI Agent / Human User │ └──────────────┬──────────────────────────┘ │ opencli command [--format json] ┌──────────────▼──────────────────────────┐ │ OpenCLI CLI Layer │ │ Commander.js Plugin Registry │ │ execution.ts / commanderAdapter.ts │ └──────────────┬──────────────────────────┘ │ CDP Protocol (WebSocket) ┌──────────────▼──────────────────────────┐ │ Browser Bridge Extension │ │ Chrome 扩展本地 WebSocket 服务器 │ └──────────────┬──────────────────────────┘ │ 复用真实用户会话 ┌──────────────▼──────────────────────────┐ │ Chrome / Chromium │ │ 用户正在运行的真实浏览器实例 │ └─────────────────────────────────────────┘关键设计决策OpenCLI 不启动独立无头浏览器如 Puppeteer/Playwright 的做法而是通过 Chrome Extension 的 native messaging API 连接到用户正在运行的 Chrome 实例。这一设计的关键收益复用所有已登录的网站 SessionTwitter、GitHub、公司内网……触发正常的人类浏览器指纹反爬虫更难检测凭证从不暴露给 Node.js 进程项目目录结构OpenCLI/ ├── src/ │ ├── cli.ts # CLI 入口 │ ├── main.ts # 主程序 │ ├── commanderAdapter.ts # Commander.js 命令解析 │ ├── execution.ts # 命令执行引擎 │ ├── plugin.ts # 插件系统 │ ├── registry.ts # Adapter 注册表 │ ├── generate.ts # Adapter 生成器 │ ├── generate-verified.ts # 带验证的生成器 │ ├── browser/ # CDP 浏览器控制层 │ └── pipeline/ # 执行流水线 ├── clis/ # 91 个内置 Adapter.js 文件 │ ├── bilibili.js │ ├── github.js │ ├── hackernews.js │ └── ... ├── extension/ # Browser Bridge Chrome Extension ├── skills/ # AI Agent Skills 定义 │ ├── opencli-explorer/ # 探索和生成 Adapter │ ├── opencli-browser/ # 低级浏览器控制 │ ├── opencli-usage/ # 帮助发现 │ └── opencli-oneshot/ # 单次执行 └── package.jsonAdapter 的结构解剖每个 Adapter 是一个标准 JS 模块定义了如何从某个网站提取结构化数据// clis/hackernews.js简化示意module.exports{name:hacker-news,description:Fetch Hacker News stories,commands:{top:{description:Get top stories,options:[{flag:--limit n,description:Number of stories,default:30}],execute:async(options,browser){// 1. 导航到目标页面awaitbrowser.goto(https://news.ycombinator.com/);// 2. 使用确定性 CSS 选择器提取数据conststoriesawaitbrowser.eval(Array.from(document.querySelectorAll(.athing)).slice(0,${options.limit}).map(el ({ rank: el.querySelector(.rank)?.innerText, title: el.querySelector(.titleline a)?.innerText, url: el.querySelector(.titleline a)?.href, points: el.nextElementSibling?.querySelector(.score)?.innerText })));// 3. 返回结构化数据CLI 框架负责格式化输出returnstories;}}}};这种设计的关键execute函数是纯确定性的——给定相同页面总是返回相同结构不依赖 LLM 做运行时决策CSS 选择器如果因页面更新失效触发 Self-Repair ProtocolSelf-Repair Protocolv1.7.0 新功能这是 OpenCLI 最有技术含量的设计之一。当 Adapter 执行失败时系统自动启动修复流程无需人工介入Adapter 执行 ↓ 失败选择器不匹配 / 页面结构变化 ↓ [第1步] 开启结构化诊断OPENCLI_DIAGNOSTIC1 → 捕获错误类型、DOM 快照、执行上下文 ↓ [第2步] 发送诊断信息给 LLM → 分析哪个选择器失效了页面结构怎么变了 ↓ [第3步] LLM 生成修复后的 Adapter 代码 ↓ [第4步] 自动替换并重试最多 3 次 ↓ 成功 → 保存修复后的 Adapter 失败3 次后→ 上报给用户需要手动介入这个设计把 LLM 的使用控制在必要时刻修复而非常规执行路径是对成本和稳定性的精准权衡。Adapter 生成流程四步级联为新网站生成 Adapter 是 OpenCLI 最复杂也最有价值的功能分为四个命令# 步骤一explore# 在真实浏览器中录制交互行为分析页面结构和认证方式opencli explore https://target-site.com# 步骤二synthesize# 将录制的交互行为合成为 Adapter 结构草稿opencli synthesize# 步骤三generate# AI 辅助将草稿转化为完整、可执行的 Adapter 代码并自动测试验证opencli generate--urlhttps://target-site.com--action提取文章列表# 步骤四cascade# 验证认证策略处理 OAuth、Cookie、2FA 等场景确保 Adapter 在真实环境中可用opencli cascade四个命令可以逐步执行调试每一步也可以一次性运行完整流程。AI Agent Skills 集成OpenCLI 提供了 4 个原生 Skills可以直接在 Claude Code 等工具中使用# 安装所有 Skillsnpx skillsaddjackwener/opencliSkill用途opencli-explorer引导 AI 完成探索 生成 Adapter 的完整流程opencli-browser低级浏览器控制click、type、screenshot、eval、网络抓包opencli-usage帮助 AI 发现哪些 Adapter 可用opencli-oneshot单次执行特定操作快速实验在 Claude Code 中的实际使用场景用户帮我抓取 Hacker News 今日 Top 20 并整理成报告 Claude Code: 1. 调用 opencli-usage → 发现 hackernews Adapter 可用 2. 调用 opencli-oneshot → opencli hacker-news top --limit 20 --format json 3. 解析 JSON 数据生成 Markdown 报告 4. 全程零额外 LLM 调用步骤 2 是纯 CLI 执行项目地址与资源官方资源GitHub: https://github.com/jackwener/OpenCLInpm: jackwener/opencliIssue Tracker: https://github.com/jackwener/OpenCLI/issuesReleases: https://github.com/jackwener/OpenCLI/releases作者其他项目opencode-ios: iOS 端 AI 编程助手Apache Arrow/DataFusion Committer 贡献列表同赛道参考项目Browser Use — Python AI 浏览器自动化Stagehand — TypeScript AI 浏览器自动化Playwright — 底层浏览器自动化框架总结与展望核心要点回顾编译期 vs 运行期OpenCLI 最核心的设计哲学——AI 只在生成 Adapter 时参与执行时完全不调用 LLM这是来自数据库查询优化思想的跨领域迁移账号安全模型Browser Bridge Extension 复用真实 Chrome 会话凭证从不暴露——这是与其他浏览器自动化工具最本质的区别Self-Repair ProtocolAdapter 失效时的自动修复机制把 LLM 使用限制在必要时刻兼顾稳定性和成本四步 Adapter 生成explore → synthesize → generate → cascade系统化的 Adapter 创建流程而非依赖一次性 Prompt数据库工程师的严谨性作为 Apache Arrow/DataFusion PMC 成员jackwener 将基础设施工程的确定性思维带入了 AI 工具链赛道适用人群AI Agent 开发者需要为 Agent 提供稳定、零成本 Web 操作接口的工程师自动化爱好者希望将常用网站变成命令行工具接入自己工作流的开发者注重数据安全的团队不愿意将账号凭证暴露给 AI 工具的企业用户Claude Code / Codex 重度用户希望扩展 AI 工具网页操作能力的开发者一个设计启示OpenCLI 的成功揭示了一个通用的工程原理AI 系统的成本最优解往往是尽量将 AI 决策前移到设计时或首次运行时而非每次运行时。这个思路不只适用于 Web 自动化——代码模板生成、工作流规划、系统配置优化都有类似的优化空间。当 AI 工具的使用成本仍然较高「一次生成多次执行」的模式将在更多领域涌现。欢迎来我的个人主页找到更多有用的知识和有趣的产品

更多文章