jackwener/OpenCLIPublic

Make Any Website into CLI & Use your logged-in browser by AI agent.

AI summary: A runtime that converts any website or local tool into a deterministic CLI and allows AI agents to operate logged-in browsers.

Stars
29.8K
+77 today
Forks
2.9K
Watchers
65
Open issues
109
Open PRs
192
Contributors
~253
Commits
1.6K
Branches
348

JavaScriptApache-2.0Created Mar 14, 2026Last push 10d agoLatest release v1.8.8+191 stars this week+871 this month

Quick answers

What is OpenCLI?
A runtime that converts any website or local tool into a deterministic CLI and allows AI agents to operate logged-in browsers.
What does OpenCLI do?
OpenCLI functions as a unified automation hub that turns complex web interfaces and local applications into standardized command-line tools. It provides built-in adapters for popular platforms, allowing users to interact with sites like Twitter, Reddit, or HackerNews directly from the terminal. More significantly, it enables AI agents to utilize the 'opencli-browser' skill to navigate, extract data, and perform actions within a user's authenticated Chrome session. By bridging the gap between web GUIs and terminal commands, it allows developers to build robust automation workflows that seamlessly integrate web interactions with local system operations.
Who is OpenCLI for?
Power users, automation engineers, and developers building agentic workflows who want to programmatically interact with web applications. It requires familiarity with CLI environments and AI agent concepts.
How do I get started with OpenCLI?
npm install -g opencli
How popular is OpenCLI on GitHub?
jackwener/OpenCLI has 29,771 stars and 2,907 forks on GitHub, and gained 191 stars in the last 7 days.
What license does OpenCLI use?
jackwener/OpenCLI is released under the Apache-2.0 license.

Star history

since Jul 30, 2026
010K20KJul 2026Aug 2026Sep 2026Oct 2026
29.8K stars as of Oct 2, 2026. Measured daily since Jul 30, 2026; GitHub no longer exposes earlier star timestamps.

Update history

1 recorded
  • Oct 4, 2026Previously tracked as jackwener/opencli; its 3 daily snapshots and 0 trending appearances were merged into this profile. Stars: 27,596 on 2026-08-02 under the old name, 29,771 on 2026-10-02 (+2,175).

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 82 commits2026-03-16: 43 commits2026-03-17: 35 commits2026-03-18: 45 commits2026-03-19: 34 commits2026-03-20: 64 commits2026-03-21: 26 commits2026-03-22: 43 commits2026-03-23: 25 commits2026-03-24: 57 commits2026-03-25: 33 commits2026-03-26: 20 commits2026-03-27: 23 commits2026-03-28: 31 commits2026-03-29: 13 commits2026-03-30: 11 commits2026-03-31: 14 commits2026-04-01: 9 commits2026-04-02: 20 commits2026-04-03: 27 commits2026-04-04: 27 commits2026-04-05: 27 commits2026-04-06: 9 commits2026-04-07: 10 commits2026-04-08: 21 commits2026-04-09: 22 commits2026-04-10: 13 commits2026-04-11: 23 commits2026-04-12: 5 commits2026-04-13: 15 commits2026-04-14: 17 commits2026-04-15: 9 commits2026-04-16: 5 commits2026-04-17: 6 commits2026-04-18: 0 commits2026-04-19: 7 commits2026-04-20: 7 commits2026-04-21: 23 commits2026-04-22: 10 commits2026-04-23: 6 commits2026-04-24: 2 commits2026-04-25: 2 commits2026-04-26: 1 commit2026-04-27: 11 commits2026-04-28: 5 commits2026-04-29: 2 commits2026-04-30: 1 commit2026-05-01: 5 commits2026-05-02: 11 commits2026-05-03: 24 commits2026-05-04: 26 commits2026-05-05: 16 commits2026-05-06: 26 commits2026-05-07: 24 commits2026-05-08: 13 commits2026-05-09: 1 commit2026-05-10: 16 commits2026-05-11: 19 commits2026-05-12: 16 commits2026-05-13: 18 commits2026-05-14: 21 commits2026-05-15: 8 commits2026-05-16: 8 commits2026-05-17: 0 commits2026-05-18: 15 commits2026-05-19: 27 commits2026-05-20: 14 commits2026-05-21: 7 commits2026-05-22: 4 commits2026-05-23: 2 commits2026-05-24: 0 commits2026-05-25: 3 commits2026-05-26: 3 commits2026-05-27: 3 commits2026-05-28: 2 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 9 commits2026-06-01: 24 commits2026-06-02: 9 commits2026-06-03: 1 commit2026-06-04: 3 commits2026-06-05: 6 commits2026-06-06: 10 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 2 commits2026-06-12: 9 commits2026-06-13: 0 commits2026-06-14: 4 commits2026-06-15: 7 commits2026-06-16: 1 commit2026-06-17: 6 commits2026-06-18: 1 commit2026-06-19: 2 commits2026-06-20: 1 commit2026-06-21: 5 commits2026-06-22: 6 commits2026-06-23: 1 commit2026-06-24: 3 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 5 commits2026-06-28: 5 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 12 commits2026-07-02: 0 commits2026-07-03: 7 commits2026-07-04: 8 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 11 commits2026-07-13: 2 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 8 commits2026-07-20: 1 commit2026-07-21: 2 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 13 commits2026-07-30: 7 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 13 commits2026-08-09: 3 commits2026-08-10: 0 commits2026-08-11: 0 commits2026-08-12: 0 commits2026-08-13: 0 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 1 commit2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 52 commits2026-08-24: 26 commits2026-08-25: 6 commits2026-08-26: 3 commits2026-08-27: 0 commits2026-08-28: 4 commits2026-08-29: 6 commits2026-08-30: 1 commit2026-08-31: 1 commit2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 0 commits2026-09-09: 0 commits2026-09-10: 0 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 0 commits2026-09-24: 0 commits2026-09-25: 1 commit2026-09-26: 0 commits2026-09-27: 0 commits2026-09-28: 0 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits
1,581 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    29,771 stars

  • Community-driven

    ~253 contributors

  • Permissive license

    Apache-2.0

  • Continuous integration

    Automated checks passing

What OpenCLI does

OpenCLI functions as a unified automation hub that turns complex web interfaces and local applications into standardized command-line tools. It provides built-in adapters for popular platforms, allowing users to interact with sites like Twitter, Reddit, or HackerNews directly from the terminal. More significantly, it enables AI agents to utilize the 'opencli-browser' skill to navigate, extract data, and perform actions within a user's authenticated Chrome session. By bridging the gap between web GUIs and terminal commands, it allows developers to build robust automation workflows that seamlessly integrate web interactions with local system operations.

Power users, automation engineers, and developers building agentic workflows who want to programmatically interact with web applications. It requires familiarity with CLI environments and AI agent concepts.

  • Web-to-CLI Adapters: Converts complex website functionalities into simple, deterministic terminal commands.
  • Agentic Browser Control: Allows AI coding agents to navigate and interact with web pages using a user's logged-in session.
  • Local Tool Hub: Centralizes access to local binaries and desktop applications (like Docker or Electron apps) under one interface.
  • Custom Adapter Authoring: Provides tools and agent skills to quickly build new CLI adapters for unsupported websites.
  • System Tray Integration: Includes a desktop app component to manage browser keep-alives and runtime diagnostics.

Where teams use it

Authenticated Web Scraping

Extract data from platforms that require complex logins by using the user's active browser session.

Agentic Workflow Automation

Allow an AI agent to read a local bug report, open a browser, navigate to a tracking system, and submit a ticket.

Terminal-Based Web Browsing

Read articles, check social media feeds, or manage cloud infrastructure without leaving the command line.

Unified Tool Management

Standardize access to disparate local developer tools and web services through a single command interface.

Getting started: npm install -g opencli

README

main branch

OpenCLI

Convert any website into a CLI & run Browser Use on your logged-in Chrome. Turn websites, browser sessions, Electron apps, and local tools into deterministic interfaces for humans and AI agents. Or run Browser Use against any page — navigate, fill forms, click, extract, automate.

中文文档 npm Node.js Version License

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.
  • Let AI Agents operate any website — install the opencli-browser skill in your AI agent (Claude Code, Cursor, etc.), and it can navigate, click, type/fill, extract, and inspect any page through your logged-in browser via opencli browser primitives.
  • Write new adapters end-to-end with opencli browser + the opencli-adapter-author skill, which guides from first recon through field decoding, code, and opencli browser verify.

It also provides desktop app adapters for Electron apps like Cursor, Trae CN, Codex, Antigravity, ChatGPT, and Trae SOLO.

Quick Start

1. Install OpenCLI

For desktop use, start with OpenCLIApp. It bundles the OpenCLI runtime, keeps the managed opencli command installed, and gives you a system tray UI for setup, diagnostics, updates, browser-login keepalive, and Web → Markdown.

Option A — OpenCLIApp (recommended for macOS / Windows): Download the latest app from https://opencli.info/download, install it, then open the app once and use the System page to install or repair the opencli command.

Option B — npm global install (CLI-only / CI / servers): OpenCLI requires Node.js >= 20.18.1 when installed through npm.

node --version
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.

Option A — Chrome Web Store (recommended): Install OpenCLI from the Chrome Web Store.

Option B — Manual install:

  1. Download the latest opencli-extension-v{version}.zip from the GitHub Releases page.
  2. Unzip it, open chrome://extensions, and enable Developer mode.
  3. Click Load unpacked and select the unzipped folder.

3. Verify the setup

opencli doctor

4. Optional: name your Chrome profile

Each Chrome profile runs its own OpenCLI extension instance. If you use multiple Chrome profiles, list the connected profiles and assign local aliases:

opencli profile list
opencli profile rename <contextId> work
opencli profile use work
opencli --profile work browser main state

With only one connected profile, OpenCLI uses it automatically. With multiple connected profiles and no default, OpenCLI asks you to choose instead of guessing.

5. 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 list shows every registered command.
  • opencli <site> <command> runs a built-in or generated adapter.
  • opencli doctor helps diagnose browser connectivity.

Extending OpenCLI

If you want to add your own commands, start with the Extending OpenCLI guide. README keeps this short; the guide covers the directory layout, source-control model, and install commands.

Need Recommended path
Keep personal website commands in your own Git repo opencli plugin create + opencli plugin install file://...
Quickly draft a private local adapter opencli browser init <site>/<command> in ~/.opencli/clis/
Modify an official adapter locally opencli adapter eject <site> + opencli adapter reset <site>
Publish or install third-party commands opencli plugin install github:user/repo

For AI Agents

OpenCLI's browser commands are designed to be used by AI Agents — not run manually. Install skills into your AI agent (Claude Code, Cursor, etc.), and the agent operates websites on your behalf using your logged-in Chrome session.

Install skills (also refreshes existing installs)

npx skills add jackwener/opencli

Or install only what you need:

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

Which skill to use

Skill When to use Example prompt to your AI agent
opencli-adapter-author Write a reusable adapter for a new site or add a command to an existing site "Write an adapter for douyin trending" / "Make a command that grabs the top posts from this page"
opencli-autofix Repair a broken adapter when a built-in command fails "opencli zhihu hot is returning empty — fix it"
opencli-browser Drive a real Chrome page ad-hoc — navigate, fill forms, click, extract "Help me check my Xiaohongshu notifications" / "Help me fill out this form" / "Use browser commands to scrape this page"
opencli-usage Quick reference for all OpenCLI commands and sites "What commands does OpenCLI have for Twitter?"

How it works

Once opencli-browser is installed, your AI agent can:

  1. Navigate to any URL using your logged-in browser
  2. Read page content via structured DOM snapshots (not screenshots)
  3. Interact — click buttons, fill forms, select options, press keys
  4. Extract data from the page or intercept network API responses
  5. Wait for elements, text, or page transitions

The agent handles all the opencli browser commands internally — you just describe what you want done in natural language.

Skill references:

Available browser commands include 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, init, verify, and close.

opencli browser commands require a <session> positional immediately after browser. opencli browser work open <url> and opencli browser work tab new [url] both return a target ID. Use opencli browser work tab list to inspect target IDs, then pass --tab <targetId> to route a command to a specific tab. tab new creates a new tab without changing the default browser target; only tab select <targetId> promotes that tab to the default target for later untargeted commands in the same session.

Writing a new adapter

When the site you need is not yet covered, use the opencli-adapter-author skill end-to-end:

  1. Recon the site and pick a pattern (SPA / SSR / JSONP / Token / Streaming).
  2. Discover the right endpoint — network inspection, initial state, bundle search, token trace, or interceptor fallback.
  3. Pick auth — PUBLIC / COOKIE / INTERCEPT / UI / LOCAL.
  4. Decode response fields and design output columns.
  5. opencli browser recon analyze <url> → opencli browser recon init <site>/<name> → write adapter → opencli browser recon verify <site>/<name>.
  6. Site knowledge persists to ~/.opencli/sites/<site>/ so the next adapter for the same site starts from context.

Configuration

Variable Default Description
OPENCLI_PROFILE — Browser Bridge profile alias/contextId to use when multiple Chrome profiles are connected
OPENCLI_WINDOW command default Set to foreground or background to override Browser Bridge window placement. Browser-backed commands also accept --window <foreground|background>.
OPENCLI_SITE_SESSION adapter default Set to ephemeral or persistent to override siteSession metadata for browser-backed adapter commands. ephemeral closes the one-shot automation window when the command finishes; persistent reuses the site's session. Per-command --site-session takes precedence.
OPENCLI_BROWSER_CONNECT_TIMEOUT 45 Seconds to wait for browser connection
OPENCLI_BROWSER_COMMAND_TIMEOUT 60 Seconds to wait for a single browser command
OPENCLI_CDP_ENDPOINT — Chrome DevTools Protocol endpoint for remote browser or Electron apps
OPENCLI_CDP_TARGET — Filter CDP targets by URL substring (e.g. detail.1688.com)
OPENCLI_VERBOSE false Enable verbose logging (-v flag also works)
DEBUG_SNAPSHOT — Set to 1 for DOM snapshot debug output

opencli browser * requires an explicit <session> positional, uses a foreground browser window by default, and keeps that session's tab lease until opencli browser <session> close or idle cleanup. Browser-backed adapters use a background adapter window and release one-shot tab leases by default. Interactive adapters can declare siteSession: 'persistent' to keep a stable site tab for continuity; pass --site-session ephemeral for a one-shot tab.

Built-in Commands

Site Commands
xiaohongshu search ask note comments feed user download publish follow unfollow notifications creator-notes creator-notes-summary creator-note-detail creator-profile creator-stats
bilibili hot search history feed ranking download comments dynamic favorite following follow unfollow me subtitle summary video user-videos 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 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 upvoted save saved comment subscribe
twitter trending search timeline tweets lists list-tweets list-create list-delete list-add list-add-batch list-remove list-remove-batch bookmarks post download profile article like likes notifications reply reply-dm thread follow unfollow followers following block unblock bookmark unbookmark delete hide-reply accept
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

Curated highlights — → see all 100+ supported sites & commands (douyin / weibo / spotify / 1688 / quark / nowcoder / google-scholar / hupu / xianyu / weread / weread-official / xiaoyuzhou / Chess.com / and more).

Desktop app adapters (Electron, via CDP): Cursor / Trae CN / Codex / Antigravity / ChatGPT App / ChatWise / Qoder / Discord / Doubao / Trae SOLO — see docs/adapters/desktop/.

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
rednote Images, Videos Downloads all media from a signed rednote note URL
bilibili Videos Requires yt-dlp installed
twitter 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
xiaoyuzhou Audio, Transcript Downloads episode audio and transcript JSON/text with local credentials
zhihu Column articles, answers (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 "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
opencli bilibili download BV1xxx --output ./bilibili
opencli twitter download elonmusk --limit 20 --output ./twitter
opencli 1688 download 841141931191 --output ./1688-downloads
opencli xiaoyuzhou download 69b3b675772ac2295bfc01d0 --output ./xiaoyuzhou
opencli xiaoyuzhou transcript 69dd0c98e2c8be31551f6a33 --output ./xiaoyuzhou-transcripts

opencli xiaoyuzhou download and transcript require local Xiaoyuzhou credentials in ~/.opencli/xiaoyuzhou.json.

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 so CI / scripts can branch on failure mode: 0 success, 66 empty result, 69 Browser Bridge down, 75 timeout, 77 auth required, 78 config error, 130 Ctrl-C. Full reference: docs/guide/exit-codes.md.

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 JS GitHub Trending repositories
opencli-plugin-hot-digest JS Multi-platform trending aggregator
opencli-plugin-juejin JS 稀土掘金 (Juejin) hot articles
opencli-plugin-vk JS VK (VKontakte) wall, feed, and search
opencli-plugin-x-article-publisher JS Publish Markdown with local images as X long-form Articles via OpenCLI and xPoster

See Plugins Guide for creating your own plugin.

Testing

See TESTING.md for how to run and write tests.

Troubleshooting

  • "Extension not connected" — Ensure the Browser Bridge extension is installed from the Chrome Web Store and enabled in chrome://extensions.
  • "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 / missing fetch / startup crash on old Node — OpenCLI requires Node.js >= 20.18.1. Run node --version, upgrade Node if needed, then retry.
  • Daemon issues — Check status: curl localhost:19825/status · View logs: curl localhost:19825/logs

Star History

Star History Chart

License

Apache-2.0

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

113 total
  1. v1.8.8v1.8.8Aug 30, 20268.6K downloads

    ## What's Changed * fix: upgrade undici to 7.29.0, 8.9.0 (CVE-2026-13697) by @anupamme in https://github.com/jackwener/OpenCLI/pull/2326 * fix: sync package-lock with undici 7.29.0 bump by @jackwener in https://github.com/jackwener/OpenCLI/pull/2361 * docs: fix broken star history chart by @OctoBored in https://github.com/jackwener/OpenCLI/pull/2301 * fix(weixin): recover draft cover uploads by @jackwener in https://github.com/jackwener/OpenCLI/pull/2362 * feat(bilibili): add --top to fetch pinned comments by @henrycjchen in https://github.com/jackwener/OpenCLI/pull/2106 * fix(xiaohongshu): harvest search rows during scroll instead of first/last screen union by @sleepyy-dog in https://github.com/jackwener/OpenCLI/pull/2349 * refactor(sinafinance): use rolling news API by @jackwener in https://github.com/jackwener/OpenCLI/pull/2365 * chore(xiaohongshu): share evaluate unwrap helper by @jackwener in https://github.com/jackwener/OpenCLI/pull/2363 * feat(zhihu): preserve comment reply threads by @wuyak in https://github.com/jackwener/OpenCLI/pull/2306 * feat(zhihu): export answers with local images by @wuyak in https://github.com/jackwener/OpenCLI/pull/2304 * fix(xiaohongshu): recover

  2. v1.8.7v1.8.7Aug 23, 20263.4K downloads

    ## What's Changed * test(e2e): headless AX smoke on all platforms (un-skip macOS) + daemon transport contract E2E by @jackwener in https://github.com/jackwener/OpenCLI/pull/2081 * ci(e2e): place each e2e gate where its runner can run it deterministically (fix red main) by @jackwener in https://github.com/jackwener/OpenCLI/pull/2082 * fix(skills): quote sitemap-author description to keep frontmatter valid YAML by @imbarain in https://github.com/jackwener/OpenCLI/pull/2122 * fix(utils): detect mixed-case HTML login walls by @hiSandog in https://github.com/jackwener/OpenCLI/pull/2120 * fix(twitter): harden article API response handling by @imbarain in https://github.com/jackwener/OpenCLI/pull/2123 * fix(twitter): pass user args through JSON.stringify in page.evaluate by @imbarain in https://github.com/jackwener/OpenCLI/pull/2121 * docs: remove daemon port env from zh readme by @jackwener in https://github.com/jackwener/OpenCLI/pull/2124 * feat(daemon): fail fast when a write command already holds the site session by @Astro-Han in https://github.com/jackwener/OpenCLI/pull/2100 * fix(chatgpt): use pure sleeps and cheap generation checks in polling loops by @Astro-Han in https://github.c

  3. v1.8.6v1.8.6Jul 3, 202620.4K downloads

    ## What's Changed * chore(extension): bump version to 1.0.21 by @jackwener in https://github.com/jackwener/OpenCLI/pull/2039 * chore(browser): extract network interceptor script by @jackwener in https://github.com/jackwener/OpenCLI/pull/2042 * chore(daemon): read status through transport layer by @jackwener in https://github.com/jackwener/OpenCLI/pull/2040 * chore(browser): share bind command handling by @jackwener in https://github.com/jackwener/OpenCLI/pull/2043 * test(slock): cover trimmed task status filters by @hiSandog in https://github.com/jackwener/OpenCLI/pull/2041 * fix(core): stop silently swallowing pipeline context + daemon WS errors by @jackwener in https://github.com/jackwener/OpenCLI/pull/1979 * feat(adapter): add Mercury reimbursement helpers by @iynewz in https://github.com/jackwener/OpenCLI/pull/2052 * fix(extension): honor persisted remaining idle lifetime on reconcile by @jackwener in https://github.com/jackwener/OpenCLI/pull/1980 * fix(extension): preserve network capture across ensureAttached re-attach by @jackwener in https://github.com/jackwener/OpenCLI/pull/1978 * feat(gemini): add model and thinking selection by @bailob in https://github.com/jackwener/Ope

  4. ext-v1.0.21ext-v1.0.21Jun 28, 20263.5K downloads
  5. v1.8.5v1.8.5Jun 27, 20262.4K downloads

    ## What's Changed * fix(bilibili/download): 付费内容下载前抛结构化 PAID_CONTENT by @huanghe in https://github.com/jackwener/OpenCLI/pull/1947 * feat(bilibili,youtube): video 命令透出付费 / 会员标记 by @huanghe in https://github.com/jackwener/OpenCLI/pull/1946 * fix(xiaohongshu/user): 登录墙报 AUTH_REQUIRED + 修 hydration 竞态 by @huanghe in https://github.com/jackwener/OpenCLI/pull/1945 * fix(browser): goto 重试覆盖裸 'Page not found:' 失效身份 by @huanghe in https://github.com/jackwener/OpenCLI/pull/1869 * feat(xiaohongshu): add saved and liked collection scrapers by @whitesticker in https://github.com/jackwener/OpenCLI/pull/1920 * feat(xiaohongshu): implement 文字配图 feature for text-image publishing by @henrycjchen in https://github.com/jackwener/OpenCLI/pull/1932 * fix(download): match video platforms on host boundary, not substring by @Chen17-sq in https://github.com/jackwener/OpenCLI/pull/1937 * feat(smzdm): expose interaction metrics and update time in search results (#1961) by @LeoLin990405 in https://github.com/jackwener/OpenCLI/pull/1968 * feat(xiaohongshu): expose like_count/note_type/user_id/published_at in ask sources by @Astro-Han in https://github.com/jackwener/OpenCLI/pull/1965 * fix(chatgpt): support cur

Code frequency

additions and deletions
+191.5K-191.5KWeek of 2026-03-15: +66,269 linesWeek of 2026-03-15: -18,052 linesWeek of 2026-03-22: +43,127 linesWeek of 2026-03-22: -11,711 linesWeek of 2026-03-29: +58,295 linesWeek of 2026-03-29: -10,607 linesWeek of 2026-04-05: +191,499 linesWeek of 2026-04-05: -170,189 linesWeek of 2026-04-12: +17,992 linesWeek of 2026-04-12: -3,340 linesWeek of 2026-04-19: +24,182 linesWeek of 2026-04-19: -12,102 linesWeek of 2026-04-26: +11,820 linesWeek of 2026-04-26: -3,616 linesWeek of 2026-05-03: +67,684 linesWeek of 2026-05-03: -8,972 linesWeek of 2026-05-10: +30,741 linesWeek of 2026-05-10: -11,187 linesWeek of 2026-05-17: +35,760 linesWeek of 2026-05-17: -3,266 linesWeek of 2026-05-24: +1,960 linesWeek of 2026-05-24: -230 linesWeek of 2026-05-31: +38,566 linesWeek of 2026-05-31: -2,880 linesWeek of 2026-06-07: +11,099 linesWeek of 2026-06-07: -1,142 linesWeek of 2026-06-14: +8,075 linesWeek of 2026-06-14: -336 linesWeek of 2026-06-21: +13,762 linesWeek of 2026-06-21: -2,638 linesWeek of 2026-06-28: +14,646 linesWeek of 2026-06-28: -3,033 linesWeek of 2026-07-05: +0 linesWeek of 2026-07-05: -0 linesWeek of 2026-07-12: +4,272 linesWeek of 2026-07-12: -335 linesWeek of 2026-07-19: +10,307 linesWeek of 2026-07-19: -390 linesWeek of 2026-07-26: +11,440 linesWeek of 2026-07-26: -425 linesWeek of 2026-08-02: +4,052 linesWeek of 2026-08-02: -377 linesWeek of 2026-08-09: +159 linesWeek of 2026-08-09: -26 linesWeek of 2026-08-16: +143 linesWeek of 2026-08-16: -24 linesWeek of 2026-08-23: +23,504 linesWeek of 2026-08-23: -5,502 linesWeek of 2026-08-30: +15 linesWeek of 2026-08-30: -10 linesWeek of 2026-09-06: +0 linesWeek of 2026-09-06: -0 linesWeek of 2026-09-13: +0 linesWeek of 2026-09-13: -0 linesWeek of 2026-09-20: +47 linesWeek of 2026-09-20: -4,174 linesWeek of 2026-09-27: +0 linesWeek of 2026-09-27: -0 linesMar 15, 2026Sep 27, 2026
+689.4K lines added, -274.6K removed over the last year.

Commits per week

last 52 weeks
3290Week of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 329 commitsWeek of 2026-03-22: 232 commitsWeek of 2026-03-29: 121 commitsWeek of 2026-04-05: 125 commitsWeek of 2026-04-12: 57 commitsWeek of 2026-04-19: 57 commitsWeek of 2026-04-26: 36 commitsWeek of 2026-05-03: 130 commitsWeek of 2026-05-10: 106 commitsWeek of 2026-05-17: 69 commitsWeek of 2026-05-24: 11 commitsWeek of 2026-05-31: 62 commitsWeek of 2026-06-07: 11 commitsWeek of 2026-06-14: 22 commitsWeek of 2026-06-21: 20 commitsWeek of 2026-06-28: 32 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 13 commitsWeek of 2026-07-19: 11 commitsWeek of 2026-07-26: 20 commitsWeek of 2026-08-02: 13 commitsWeek of 2026-08-09: 3 commitsWeek of 2026-08-16: 1 commitsWeek of 2026-08-23: 97 commitsWeek of 2026-08-30: 2 commitsWeek of 2026-09-06: 0 commitsWeek of 2026-09-13: 0 commitsWeek of 2026-09-20: 1 commitsWeek of 2026-09-27: 0 commitsOct 5, 2025Sep 27, 2026
1.6K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 12 commitsSun 1:00 — 13 commitsSun 2:00 — 15 commitsSun 3:00 — 24 commitsSun 4:00 — 12 commitsSun 5:00 — 0 commitsSun 6:00 — 12 commitsSun 7:00 — 14 commitsSun 8:00 — 9 commitsSun 9:00 — 0 commitsSun 10:00 — 3 commitsSun 11:00 — 2 commitsSun 12:00 — 1 commitsSun 13:00 — 1 commitsSun 14:00 — 20 commitsSun 15:00 — 14 commitsSun 16:00 — 12 commitsSun 17:00 — 25 commitsSun 18:00 — 26 commitsSun 19:00 — 28 commitsSun 20:00 — 14 commitsSun 21:00 — 20 commitsSun 22:00 — 24 commitsSun 23:00 — 16 commitsMon 0:00 — 23 commitsMon 1:00 — 16 commitsMon 2:00 — 12 commitsMon 3:00 — 12 commitsMon 4:00 — 4 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 1 commitsMon 8:00 — 2 commitsMon 9:00 — 5 commitsMon 10:00 — 0 commitsMon 11:00 — 1 commitsMon 12:00 — 13 commitsMon 13:00 — 12 commitsMon 14:00 — 19 commitsMon 15:00 — 20 commitsMon 16:00 — 10 commitsMon 17:00 — 19 commitsMon 18:00 — 14 commitsMon 19:00 — 20 commitsMon 20:00 — 14 commitsMon 21:00 — 8 commitsMon 22:00 — 10 commitsMon 23:00 — 18 commitsTue 0:00 — 21 commitsTue 1:00 — 16 commitsTue 2:00 — 20 commitsTue 3:00 — 4 commitsTue 4:00 — 2 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 2 commitsTue 10:00 — 7 commitsTue 11:00 — 7 commitsTue 12:00 — 9 commitsTue 13:00 — 6 commitsTue 14:00 — 18 commitsTue 15:00 — 12 commitsTue 16:00 — 16 commitsTue 17:00 — 15 commitsTue 18:00 — 7 commitsTue 19:00 — 16 commitsTue 20:00 — 16 commitsTue 21:00 — 18 commitsTue 22:00 — 13 commitsTue 23:00 — 17 commitsWed 0:00 — 12 commitsWed 1:00 — 16 commitsWed 2:00 — 7 commitsWed 3:00 — 8 commitsWed 4:00 — 2 commitsWed 5:00 — 1 commitsWed 6:00 — 4 commitsWed 7:00 — 2 commitsWed 8:00 — 0 commitsWed 9:00 — 0 commitsWed 10:00 — 2 commitsWed 11:00 — 1 commitsWed 12:00 — 9 commitsWed 13:00 — 18 commitsWed 14:00 — 9 commitsWed 15:00 — 16 commitsWed 16:00 — 12 commitsWed 17:00 — 19 commitsWed 18:00 — 12 commitsWed 19:00 — 21 commitsWed 20:00 — 9 commitsWed 21:00 — 12 commitsWed 22:00 — 17 commitsWed 23:00 — 20 commitsThu 0:00 — 12 commitsThu 1:00 — 14 commitsThu 2:00 — 4 commitsThu 3:00 — 1 commitsThu 4:00 — 2 commitsThu 5:00 — 1 commitsThu 6:00 — 1 commitsThu 7:00 — 0 commitsThu 8:00 — 0 commitsThu 9:00 — 0 commitsThu 10:00 — 0 commitsThu 11:00 — 2 commitsThu 12:00 — 12 commitsThu 13:00 — 7 commitsThu 14:00 — 6 commitsThu 15:00 — 8 commitsThu 16:00 — 20 commitsThu 17:00 — 14 commitsThu 18:00 — 9 commitsThu 19:00 — 6 commitsThu 20:00 — 13 commitsThu 21:00 — 15 commitsThu 22:00 — 19 commitsThu 23:00 — 10 commitsFri 0:00 — 11 commitsFri 1:00 — 11 commitsFri 2:00 — 15 commitsFri 3:00 — 8 commitsFri 4:00 — 2 commitsFri 5:00 — 1 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 2 commitsFri 10:00 — 16 commitsFri 11:00 — 10 commitsFri 12:00 — 6 commitsFri 13:00 — 7 commitsFri 14:00 — 18 commitsFri 15:00 — 6 commitsFri 16:00 — 12 commitsFri 17:00 — 17 commitsFri 18:00 — 11 commitsFri 19:00 — 14 commitsFri 20:00 — 14 commitsFri 21:00 — 2 commitsFri 22:00 — 7 commitsFri 23:00 — 4 commitsSat 0:00 — 20 commitsSat 1:00 — 19 commitsSat 2:00 — 13 commitsSat 3:00 — 2 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 2 commitsSat 9:00 — 4 commitsSat 10:00 — 5 commitsSat 11:00 — 3 commitsSat 12:00 — 8 commitsSat 13:00 — 8 commitsSat 14:00 — 8 commitsSat 15:00 — 7 commitsSat 16:00 — 9 commitsSat 17:00 — 7 commitsSat 18:00 — 6 commitsSat 19:00 — 7 commitsSat 20:00 — 11 commitsSat 21:00 — 18 commitsSat 22:00 — 7 commitsSat 23:00 — 11 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits934 (59%)
Community commits659 (41%)

1,593 commits in total over the last year.

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    272.8K stars · JavaScript

  • NousResearch/hermes-agent

    The agent that grows with you

    251.2K stars · Python

  • react/react

    The library for web and native user interfaces.

    250.9K stars · JavaScript

  • n8n-io/n8n

    Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

    206.7K stars · TypeScript

  • yt-dlp/yt-dlp

    A feature-rich command-line audio/video downloader

    195.5K stars · Python

  • firecrawl/firecrawl

    Supercharge your AI agents with data from the web and beyond. Building the library for superintelligence. 🔥

    188.6K stars · TypeScript