* docs: restructure readme narrative * docs: clarify generate and agent entry points
15 KiB
OpenCLI
Turn websites, browser sessions, Electron apps, and local tools into deterministic interfaces for humans and AI agents. Reuse your logged-in browser, automate live workflows, and crystallize repeated actions into reusable CLI commands.
OpenCLI gives you one surface for three different kinds of automation:
- Use built-in adapters for sites like Bilibili, Zhihu, Xiaohongshu, Reddit, HackerNews, Twitter/X, and many more.
- Drive a live browser directly with
opencli browserwhen an AI agent needs to click, type, extract, or inspect a page in real time. - Generate new adapters from real browser behavior with
explore,synthesize,generate, andcascade.
It also works as a CLI hub for local tools such as gh, docker, and other binaries you register yourself, plus desktop app adapters for Electron apps like Cursor, Codex, Antigravity, ChatGPT, and Notion.
Why OpenCLI
- One mental model: use the same CLI for websites, browser automation, Electron apps, and local tools.
- Reuse real sessions: browser-backed commands run against your existing Chrome/Chromium login state instead of reimplementing auth.
- Deterministic outputs: adapters return stable, scriptable structures that work well in shells, CI, and AI-agent tool use.
- AI-agent ready:
browserhandles live control,explorediscovers APIs,synthesizedrafts adapters, andcascadeprobes auth strategies. - Low runtime cost: no model tokens are consumed when running existing commands.
- Extensible by default: keep built-ins, register local CLIs, or drop
.ts/.yamladapters intoclis/.
Quick Start
1. Install OpenCLI
npm install -g @jackwener/opencli
2. Install the Browser Bridge Extension
OpenCLI connects to Chrome/Chromium through a lightweight Browser Bridge extension plus a small local daemon. The daemon auto-starts when needed.
- Download the latest
opencli-extension.zipfrom the GitHub Releases page. - Unzip it, open
chrome://extensions, and enable Developer mode. - Click Load unpacked and select the unzipped folder.
3. Verify the setup
opencli doctor
opencli daemon status
4. Run your first commands
opencli list
opencli hackernews top --limit 5
opencli bilibili hot --limit 5
For Humans
Use OpenCLI directly when you want a reliable command instead of a live browser session:
opencli listshows every registered command.opencli <site> <command>runs a built-in or generated adapter.opencli register mycliexposes a local CLI through the same discovery surface.opencli daemon statusandopencli doctorhelp diagnose browser connectivity.
For AI Agents
Use two different entry points depending on the task:
skills/opencli-generate/SKILL.md: the task-level entry point for requests like "generate a CLI for this site".skills/opencli-browser/SKILL.md: the low-level control surface for live browsing, debugging, and manual intervention.
Install the packaged skills with:
npx skills add jackwener/opencli
Or install only what you need:
npx skills add jackwener/opencli --skill opencli-usage
npx skills add jackwener/opencli --skill opencli-generate
npx skills add jackwener/opencli --skill opencli-browser
npx skills add jackwener/opencli --skill opencli-explorer
npx skills add jackwener/opencli --skill opencli-oneshot
In practice:
- start with
opencli-generatewhen the agent needs a reusable command for a site - use
opencli-browserwhen the agent needs to inspect or steer the page directly
Available browser commands include open, state, click, type, select, keys, wait, get, screenshot, scroll, back, eval, network, init, verify, and close.
Core Concepts
browser: live control
Use opencli browser when the task is inherently interactive and the agent needs to operate the page directly.
Built-in adapters: stable commands
Use site-specific commands such as opencli hackernews top or opencli reddit hot when the capability already exists and you want deterministic output.
explore / synthesize / generate: create new CLIs
Use these commands when the site you need is not covered yet:
exploreinspects the page, network activity, and capability surface.synthesizeturns exploration artifacts into evaluate-based YAML adapters.generateruns the verified generation path and returns either a usable command or a structured explanation of why completion was blocked or needs human review.
cascade: auth strategy discovery
Use cascade to probe fallback auth paths such as public endpoints, cookies, and custom headers before you commit to an adapter design.
CLI Hub and desktop adapters
OpenCLI is not only for websites. It can also:
- expose local binaries like
gh,docker,obsidian, or custom tools throughopencli <tool> ... - control Electron desktop apps through dedicated adapters and CDP-backed integrations
Prerequisites
- Node.js: >= 20.0.0 (or Bun >= 1.0)
- Chrome or Chromium running and logged into the target site for browser-backed commands
Important
: Browser-backed commands reuse your Chrome/Chromium login session. If you get empty data or permission-like failures, first confirm the site is already open and authenticated in Chrome/Chromium.
Update
npm install -g @jackwener/opencli@latest
For Developers
Install from source:
git clone git@github.com:jackwener/opencli.git
cd opencli
npm install
npm run build
npm link
To load the source Browser Bridge extension:
- Open
chrome://extensionsand enable Developer mode. - Click Load unpacked and select this repository's
extension/directory.
Built-in Commands
| Site | Commands |
|---|---|
| xiaohongshu | search note comments feed user download publish notifications creator-notes creator-notes-summary creator-note-detail creator-profile creator-stats |
| bilibili | hot search history feed ranking download comments dynamic favorite following me subtitle user-videos |
| tieba | hot posts search read |
| hupu | hot search detail mentions reply like unlike |
trending search timeline bookmarks post download profile article like likes notifications reply reply-dm thread follow unfollow followers following block unblock bookmark unbookmark delete hide-reply accept |
|
hot frontpage popular search subreddit read user user-posts user-comments upvote upvoted save saved comment subscribe |
|
| zhihu | hot search question download follow like favorite comment answer |
| amazon | bestsellers search product offer discussion movers-shakers new-releases |
| 1688 | search item assets download store |
| gemini | new ask image deep-research deep-research-result |
| yuanbao | new ask |
| notebooklm | status list open current get history summary note-list notes-get source-list source-get source-fulltext source-guide |
| spotify | auth status play pause next prev volume search queue shuffle repeat |
| xianyu | search item chat |
| xiaoe | courses detail catalog play-url content |
| quark | ls mkdir mv rename rm save share-tree |
79+ adapters in total — → see all supported sites & commands
CLI Hub
OpenCLI acts as a universal hub for your existing command-line tools — unified discovery, pure passthrough execution, and auto-install (if a tool isn't installed, OpenCLI runs brew install <tool> automatically before re-running the command).
| External CLI | Description | Example |
|---|---|---|
| gh | GitHub CLI | opencli gh pr list --limit 5 |
| obsidian | Obsidian vault management | opencli obsidian search query="AI" |
| docker | Docker | opencli docker ps |
| lark-cli | Lark/Feishu — messages, docs, calendar, tasks, 200+ commands | opencli lark-cli calendar +agenda |
| dingtalk | DingTalk — cross-platform CLI for DingTalk's full suite, designed for humans and AI agents | opencli dingtalk msg send --to user "hello" |
| wecom | WeCom/企业微信 — CLI for WeCom open platform, for humans and AI agents | opencli wecom msg send --to user "hello" |
| vercel | Vercel — deploy projects, manage domains, env vars, logs | opencli vercel deploy --prod |
Register your own — add any local CLI so AI agents can discover it via opencli list:
opencli register mycli
Desktop App Adapters
Control Electron desktop apps directly from the terminal. Each adapter has its own detailed documentation:
| App | Description | Doc |
|---|---|---|
| Cursor | Control Cursor IDE — Composer, chat, code extraction | Doc |
| Codex | Drive OpenAI Codex CLI agent headlessly | Doc |
| Antigravity | Control Antigravity Ultra from terminal | Doc |
| ChatGPT | Automate ChatGPT macOS desktop app | Doc |
| ChatWise | Multi-LLM client (GPT-4, Claude, Gemini) | Doc |
| Notion | Search, read, write Notion pages | Doc |
| Discord | Discord Desktop — messages, channels, servers | Doc |
| Doubao | Control Doubao AI desktop app via CDP | Doc |
To add a new Electron app, start with docs/guide/electron-app-cli.md.
Download Support
OpenCLI supports downloading images, videos, and articles from supported platforms.
| Platform | Content Types | Notes |
|---|---|---|
| xiaohongshu | Images, Videos | Downloads all media from a note |
| bilibili | Videos | Requires yt-dlp installed |
| Images, Videos | From user media tab or single tweet | |
| douban | Images | Poster / still image lists |
| pixiv | Images | Original-quality illustrations, multi-page |
| 1688 | Images, Videos | Downloads page-visible product media from item pages |
| zhihu | Articles (Markdown) | Exports with optional image download |
| weixin | Articles (Markdown) | WeChat Official Account articles |
For video downloads, install yt-dlp first: brew install yt-dlp
opencli xiaohongshu download abc123 --output ./xhs
opencli bilibili download BV1xxx --output ./bilibili
opencli twitter download elonmusk --limit 20 --output ./twitter
opencli 1688 download 841141931191 --output ./1688-downloads
Output Formats
All built-in commands support --format / -f with table (default), json, yaml, md, and csv.
opencli bilibili hot -f json # Pipe to jq or LLMs
opencli bilibili hot -f csv # Spreadsheet-friendly
opencli bilibili hot -v # Verbose: show pipeline debug steps
Exit Codes
opencli follows Unix sysexits.h conventions so it integrates naturally with shell pipelines and CI scripts:
| Code | Meaning | When |
|---|---|---|
0 |
Success | Command completed normally |
1 |
Generic error | Unexpected / unclassified failure |
2 |
Usage error | Bad arguments or unknown command |
66 |
Empty result | No data returned (EX_NOINPUT) |
69 |
Service unavailable | Browser Bridge not connected (EX_UNAVAILABLE) |
75 |
Temporary failure | Command timed out — retry (EX_TEMPFAIL) |
77 |
Auth required | Not logged in to target site (EX_NOPERM) |
78 |
Config error | Missing credentials or bad config (EX_CONFIG) |
130 |
Interrupted | Ctrl-C / SIGINT |
opencli spotify status || echo "exit $?" # 69 if browser not running
opencli github issues 2>/dev/null
[ $? -eq 77 ] && opencli github auth # auto-auth if not logged in
Plugins
Extend OpenCLI with community-contributed adapters:
opencli plugin install github:user/opencli-plugin-my-tool
opencli plugin list
opencli plugin update --all
opencli plugin uninstall my-tool
| Plugin | Type | Description |
|---|---|---|
| opencli-plugin-github-trending | YAML | GitHub Trending repositories |
| opencli-plugin-hot-digest | TS | Multi-platform trending aggregator |
| opencli-plugin-juejin | YAML | 稀土掘金 (Juejin) hot articles |
| opencli-plugin-vk | TS | VK (VKontakte) wall, feed, and search |
See Plugins Guide for creating your own plugin.
For AI Agents (Developer Guide)
Quick mode: To generate a single command for a specific page URL, see opencli-oneshot skill — just a URL + one-line goal, 4 steps done.
Full mode: Before writing any adapter code, read opencli-explorer skill. It contains the complete browser exploration workflow, the 5-tier authentication strategy decision tree, and debugging guide.
opencli explore https://example.com --site mysite # Discover APIs + capabilities
opencli synthesize mysite # Generate YAML adapters
opencli generate https://example.com --goal "hot" # One-shot: explore → synthesize → register
opencli cascade https://api.example.com/data # Auto-probe: PUBLIC → COOKIE → HEADER
Testing
See TESTING.md for how to run and write tests.
Troubleshooting
- "Extension not connected" — Ensure the Browser Bridge extension is installed and enabled in
chrome://extensionsin Chrome or Chromium. - "attach failed: Cannot access a chrome-extension:// URL" — Another extension may be interfering. Try disabling other extensions temporarily.
- Empty data or 'Unauthorized' error — Your Chrome/Chromium login session may have expired. Navigate to the target site and log in again.
- Node API errors — Ensure Node.js >= 20. Some dependencies require modern Node APIs.
- Daemon issues — Check status:
curl localhost:19825/status· View logs:curl localhost:19825/logs