opencli Reader (Generic Fallback, Read-Only)
Generic fallback for any source opencli supports via its adapter registry (90+ sites, growing). Use this skill only when no dedicated finance-skill covers the source — the specialized skills (twitter-reader, linkedin-reader, discord-reader, telegram-reader, yc-reader) are always preferred when the request matches one of them.
This skill is read-only. Write commands that opencli exposes (post, like, comment, send, save, upvote, subscribe, follow, delete, reply-dm, etc.) must not be invoked.
Step 1: Decide Whether to Use This Skill
Only use this skill if the request cannot be handled by a more specific skill.
| If the user asks about… |
Use this skill instead |
| Twitter/X |
twitter-reader |
| LinkedIn |
linkedin-reader |
| Discord |
discord-reader |
| Telegram |
telegram-reader |
| Y Combinator |
yc-reader |
| Anything else opencli supports (Yahoo Finance, Bloomberg, Reuters, Reddit, HackerNews, Eastmoney, Xueqiu, Substack, arXiv, etc.) |
this skill |
If the source is not in opencli's registry either, stop and tell the user the request isn't covered — don't fall back to ad-hoc scraping.
Step 2: Ensure opencli Is Ready
Current environment status:
!`(command -v opencli && opencli doctor 2>&1 | head -5 && echo "READY" || echo "SETUP_NEEDED") 2>/dev/null || echo "NOT_INSTALLED"`
If NOT_INSTALLED:
npm install -g @jackwener/opencli
If SETUP_NEEDED, guide the user through Browser Bridge setup (only required for adapters whose strategy is COOKIE, HEADER, INTERCEPT, or UI — PUBLIC and LOCAL adapters work without a browser):
- Download the latest
opencli-extension-v{version}.zip from the GitHub Releases page
- Unzip it, open
chrome://extensions in Chrome, enable Developer mode
- Click Load unpacked and select the unzipped folder
- Make sure Chrome is logged into the target site, then re-run
opencli doctor
Requires Node.js >= 21 (or Bun >= 1.0).
Step 3: Discover the Right Command
Do not guess command names or flags — the registry has 500+ commands and changes weekly. Instead:
# Full registry (grouped by site), machine-readable JSON
opencli list -f json
# Filter to a site
opencli list | grep -i <site>
# Site-level help (all commands + flags)
opencli <site> --help
# Command-level help (positional args + flags + defaults)
opencli <site> <command> --help
The opencli list -f json entry for each command includes:
site — adapter namespace (e.g., yahoo-finance)
name — subcommand (e.g., quote)
strategy — PUBLIC / COOKIE / HEADER / INTERCEPT / UI / LOCAL — tells you if a browser login is needed
description, args, columns — canonical metadata
Use opencli list -f json as the source of truth. Never paste a site list into the plan from memory; adapters are added every week.
Quick map of the most common finance / research sources
The table below is a shortlist, not exhaustive — always confirm with opencli <site> --help.
| Source |
Site slug |
Common commands |
| Yahoo Finance |
yahoo-finance |
quote |
| Bloomberg |
bloomberg |
markets, economics, industries, tech, politics, opinions, news, businessweek, feeds, main |
| Reuters |
reuters |
search |
| Eastmoney (东方财富) |
eastmoney |
quote, rank, kline, sectors, etf, holders, money-flow, northbound, longhu, kuaixun, convertible, index-board, announcement, hot-rank |
| Xueqiu (雪球) |
xueqiu |
stock, hot-stock, hot, feed, comments, watchlist, search, groups, fund-snapshot, fund-holdings, earnings-date, kline |
| Sinafinance |
sinafinance |
(see --help) |
| TDX / THS |
tdx, ths |
(see --help) |
| Barchart (options) |
barchart |
quote, options, flow, greeks |
| Reddit |
reddit |
hot, popular, frontpage, search, subreddit, read, user, user-posts, user-comments, saved |
| HackerNews |
hackernews |
top, best, new, ask, show, jobs, user, search |
| Substack |
substack |
feed, publication, search |
| Medium |
medium |
(see --help) |
| arXiv |
arxiv |
(see --help) |
| Google Scholar |
google-scholar |
(see --help) |
| Weibo |
weibo |
(see --help) |
| Bilibili |
bilibili |
hot, video + more |
| Xiaohongshu (小红书) |
xiaohongshu |
(see --help) |
| Rednote (小红书 international) |
rednote |
(see --help — mirrors xiaohongshu) |
| Zhihu |
zhihu |
(see --help) |
| Tieba (百度贴吧) |
tieba |
(see --help) |
| Hupu (虎扑) |
hupu |
(see --help) |
| Xianyu (闲鱼) |
xianyu |
(see --help) |
| 1688 |
1688 |
(see --help) |
| Gitee |
gitee |
(see --help) |
| Quark |
quark |
(see --help) |
| Baidu Scholar |
baidu-scholar |
(see --help) |
| Nowcoder |
nowcoder |
(see --help) |
| Wanfang |
wanfang |
(see --help) |
| Doubao (豆包) |
doubao |
(see --help) |
| Yuanbao (腾讯元宝) |
yuanbao |
(see --help) |
| Google Gemini |
gemini |
(see --help) |
| NotebookLM |
notebooklm |
(see --help) |
| Claude |
claude |
(see --help) |
| 36kr |
36kr |
(see --help) |
| Jike |
jike |
(see --help) |
| Bluesky |
bluesky |
(see --help) |
| Apple Podcasts |
apple-podcasts |
(see --help) |
| Xiaoyuzhou (podcasts) |
xiaoyuzhou |
(see --help) |
| Spotify |
spotify |
(see --help) |
| YouTube |
youtube |
(see --help) |
| Weixin Official Account |
weixin |
(see --help — drafts is read; create-draft is write) |
| Toutiao |
toutiao |
articles |
| Government policy / law |
gov-policy, gov-law |
(see --help) |
| Web download / reader |
web |
read, download |
For anything not listed, run opencli list -f json and filter.
Step 4: Check the Adapter's Strategy Before Running
Run opencli list -f json (or opencli <site> <command> --help) and read the strategy field:
| Strategy |
What it means |
Preconditions |
PUBLIC |
Pure HTTP; no browser needed |
None |
LOCAL |
Talks to a local endpoint |
Local service running |
COOKIE / HEADER |
Reuses your Chrome login for the site |
Chrome logged into the site + Browser Bridge extension loaded |
INTERCEPT |
Opens an automation window to capture a signed request |
Same as COOKIE; be patient — may take several seconds |
UI |
Full DOM interaction |
Same as COOKIE; slowest; results depend on the site's current layout |
If the user doesn't have a login and the adapter's strategy is not PUBLIC / LOCAL, tell them they need to log into the site in Chrome before retrying.
Step 5: Execute the Command
General pattern
opencli <site> <command> [positional-args] [flags] -f json
Universal flags
| Flag |
Effect |
-f json |
Structured JSON — always prefer this for agent processing |
-f yaml / -f csv / -f md / -f table / -f plain |
Other formats |
-v |
Verbose logging (also sets OPENCLI_VERBOSE=1) |
--live |
Keep the automation window open after the command (browser-backed adapters only) |
--focus |
Open the automation window in the foreground (browser-backed adapters only) |
Command-specific flags (--limit, --filter, --type, etc.) are not universal — always check opencli <site> <command> --help.
Examples
# Yahoo Finance quote (PUBLIC)
opencli yahoo-finance quote AAPL -f json
# Reddit hot posts in a subreddit (COOKIE or PUBLIC depending on subreddit)
opencli reddit subreddit wallstreetbets --limit 20 -f json
opencli reddit search "SPY options" --limit 15 -f json
# HackerNews top (PUBLIC)
opencli hackernews top --limit 20 -f json
# Eastmoney hot rank (PUBLIC)
opencli eastmoney hot-rank -f json
# Xueqiu hot stocks (PUBLIC or COOKIE)
opencli xueqiu hot-stock -f json
opencli xueqiu stock SH600519 -f json
# Bloomberg markets headlines (COOKIE)
opencli bloomberg markets -f json
# arXiv paper search (PUBLIC)
opencli arxiv search "volatility surface" --limit 10 -f json
# Substack feed
opencli substack feed --limit 20 -f json
# Web page → readable markdown (PUBLIC)
opencli web read "https://example.com/article" -f json
Key rules
- Always use
opencli <site> <command> --help before constructing a command you haven't run this session — don't assume flag names.
- Use
-f json for programmatic processing.
- Start with a small
--limit (10–20) to validate the shape before pulling more.
- Check
strategy before running a browser-backed adapter — if the user isn't logged in, a COOKIE / UI adapter will fail.
- NEVER execute write operations. Common write command names to avoid across adapters:
post, reply, comment, like, unlike, upvote, save, subscribe, unsubscribe, follow, unfollow, block, unblock, delete, bookmark, unbookmark, send, create-draft, reply-dm, accept. If you're unsure whether a command is read or write, check the description in opencli list -f json; if it suggests a mutation, skip it.
Step 6: Handle Failures
If a command returns empty or errors out, the site may have changed its selectors / API. opencli has a built-in self-repair loop:
# Re-run with diagnostic context
OPENCLI_DIAGNOSTIC=1 opencli <site> <command> <args>
This emits a structured RepairContext that identifies the failing adapter's source path. Possible responses:
- If the user has the
opencli-autofix skill installed, tell them to run that skill.
- If not, suggest they file an issue at https://github.com/jackwener/opencli/issues with the
RepairContext output.
- Don't silently fall back to hand-rolled scraping — that hides the bug from the upstream registry.
Rate limits on the target site can also cause empty results; wait and retry.
Step 7: Present the Results
- Summarize the data for the user's actual question, don't just dump the raw JSON.
- Include source attribution — site name + URL for each item where available.
- For market data, surface price / % change / volume / market cap and flag anomalies.
- For news/posts, highlight headlines, timestamps, and key quotes.
- For research (arXiv, Scholar), include title, authors, abstract, and link.
- Treat browser sessions as private — never echo CDP endpoints, cookies, or auth tokens.
Reference Files
references/discovery.md — How to navigate opencli list, opencli <site> --help, and the JSON schema of registry entries
references/finance-sources.md — Detailed notes on the finance-heavy adapters (Yahoo Finance, Bloomberg, Eastmoney, Xueqiu, Barchart, Reuters, Reddit, HackerNews) and which commands are read vs write
Read these reference files when you need concrete examples for a specific site, or when the user asks for a capability not covered by one of the dedicated readers.
1---2name: opencli-reader3description: Generic read-only fallback for any source opencli covers but this repo has no dedicated reader for — Yahoo Finance, Bloomberg, Reuters, Barchart, Eastmoney, Xueqiu, Sinafinance, Reddit, HackerNews, Substack, Medium, Weibo, Bilibili, Xiaohongshu, Zhihu, arXiv, Google Scholar, Apple Podcasts, Xiaoyuzhou, Spotify, YouTube, Weixin, Amazon, and more. Triggers: "use opencli to read", "grab the frontpage from hackernews", "read reddit r/wallstreetbets", "fetch Eastmoney hot stocks", "pull Xueqiu feed", "get Bloomberg markets headlines", "search arXiv for", any request to read from a site where a specialized skill does not exist but opencli does. FALLBACK — prefer twitter-reader, linkedin-reader, discord-reader, telegram-reader, or yc-reader when the source matches. READ-ONLY — never invoke write operations.4---56# opencli Reader (Generic Fallback, Read-Only)78Generic fallback for any source opencli supports via its [adapter registry](https://github.com/jackwener/opencli) (90+ sites, growing). Use this skill only when **no dedicated finance-skill covers the source** — the specialized skills (`twitter-reader`, `linkedin-reader`, `discord-reader`, `telegram-reader`, `yc-reader`) are always preferred when the request matches one of them.910**This skill is read-only.** Write commands that opencli exposes (post, like, comment, send, save, upvote, subscribe, follow, delete, reply-dm, etc.) must not be invoked.1112---1314## Step 1: Decide Whether to Use This Skill1516Only use this skill if the request **cannot** be handled by a more specific skill.1718| If the user asks about… | Use this skill instead |19|---|---|20| Twitter/X | `twitter-reader` |21| LinkedIn | `linkedin-reader` |22| Discord | `discord-reader` |23| Telegram | `telegram-reader` |24| Y Combinator | `yc-reader` |25| Anything else opencli supports (Yahoo Finance, Bloomberg, Reuters, Reddit, HackerNews, Eastmoney, Xueqiu, Substack, arXiv, etc.) | **this skill** |2627If the source is not in opencli's registry either, stop and tell the user the request isn't covered — don't fall back to ad-hoc scraping.2829---3031## Step 2: Ensure opencli Is Ready3233**Current environment status:**3435```36!`(command -v opencli && opencli doctor 2>&1 | head -5 && echo "READY" || echo "SETUP_NEEDED") 2>/dev/null || echo "NOT_INSTALLED"`37```3839If `NOT_INSTALLED`:4041```bash42npm install -g @jackwener/opencli43```4445If `SETUP_NEEDED`, guide the user through Browser Bridge setup (only required for adapters whose strategy is `COOKIE`, `HEADER`, `INTERCEPT`, or `UI` — `PUBLIC` and `LOCAL` adapters work without a browser):46471. Download the latest `opencli-extension-v{version}.zip` from the [GitHub Releases page](https://github.com/jackwener/opencli/releases)482. Unzip it, open `chrome://extensions` in Chrome, enable **Developer mode**493. Click **Load unpacked** and select the unzipped folder504. Make sure Chrome is logged into the target site, then re-run `opencli doctor`5152Requires Node.js >= 21 (or Bun >= 1.0).5354---5556## Step 3: Discover the Right Command5758**Do not guess command names or flags** — the registry has 500+ commands and changes weekly. Instead:5960```bash61# Full registry (grouped by site), machine-readable JSON62opencli list -f json6364# Filter to a site65opencli list | grep -i <site>6667# Site-level help (all commands + flags)68opencli <site> --help6970# Command-level help (positional args + flags + defaults)71opencli <site> <command> --help72```7374The `opencli list -f json` entry for each command includes:75- `site` — adapter namespace (e.g., `yahoo-finance`)76- `name` — subcommand (e.g., `quote`)77- `strategy` — `PUBLIC` / `COOKIE` / `HEADER` / `INTERCEPT` / `UI` / `LOCAL` — tells you if a browser login is needed78- `description`, `args`, `columns` — canonical metadata7980Use `opencli list -f json` as the source of truth. Never paste a site list into the plan from memory; adapters are added every week.8182### Quick map of the most common finance / research sources8384The table below is a **shortlist**, not exhaustive — always confirm with `opencli <site> --help`.8586| Source | Site slug | Common commands |87|---|---|---|88| Yahoo Finance | `yahoo-finance` | `quote` |89| Bloomberg | `bloomberg` | `markets`, `economics`, `industries`, `tech`, `politics`, `opinions`, `news`, `businessweek`, `feeds`, `main` |90| Reuters | `reuters` | `search` |91| Eastmoney (东方财富) | `eastmoney` | `quote`, `rank`, `kline`, `sectors`, `etf`, `holders`, `money-flow`, `northbound`, `longhu`, `kuaixun`, `convertible`, `index-board`, `announcement`, `hot-rank` |92| Xueqiu (雪球) | `xueqiu` | `stock`, `hot-stock`, `hot`, `feed`, `comments`, `watchlist`, `search`, `groups`, `fund-snapshot`, `fund-holdings`, `earnings-date`, `kline` |93| Sinafinance | `sinafinance` | (see `--help`) |94| TDX / THS | `tdx`, `ths` | (see `--help`) |95| Barchart (options) | `barchart` | `quote`, `options`, `flow`, `greeks` |96| Reddit | `reddit` | `hot`, `popular`, `frontpage`, `search`, `subreddit`, `read`, `user`, `user-posts`, `user-comments`, `saved` |97| HackerNews | `hackernews` | `top`, `best`, `new`, `ask`, `show`, `jobs`, `user`, `search` |98| Substack | `substack` | `feed`, `publication`, `search` |99| Medium | `medium` | (see `--help`) |100| arXiv | `arxiv` | (see `--help`) |101| Google Scholar | `google-scholar` | (see `--help`) |102| Weibo | `weibo` | (see `--help`) |103| Bilibili | `bilibili` | `hot`, `video` + more |104| Xiaohongshu (小红书) | `xiaohongshu` | (see `--help`) |105| Rednote (小红书 international) | `rednote` | (see `--help` — mirrors `xiaohongshu`) |106| Zhihu | `zhihu` | (see `--help`) |107| Tieba (百度贴吧) | `tieba` | (see `--help`) |108| Hupu (虎扑) | `hupu` | (see `--help`) |109| Xianyu (闲鱼) | `xianyu` | (see `--help`) |110| 1688 | `1688` | (see `--help`) |111| Gitee | `gitee` | (see `--help`) |112| Quark | `quark` | (see `--help`) |113| Baidu Scholar | `baidu-scholar` | (see `--help`) |114| Nowcoder | `nowcoder` | (see `--help`) |115| Wanfang | `wanfang` | (see `--help`) |116| Doubao (豆包) | `doubao` | (see `--help`) |117| Yuanbao (腾讯元宝) | `yuanbao` | (see `--help`) |118| Google Gemini | `gemini` | (see `--help`) |119| NotebookLM | `notebooklm` | (see `--help`) |120| Claude | `claude` | (see `--help`) |121| 36kr | `36kr` | (see `--help`) |122| Jike | `jike` | (see `--help`) |123| Bluesky | `bluesky` | (see `--help`) |124| Apple Podcasts | `apple-podcasts` | (see `--help`) |125| Xiaoyuzhou (podcasts) | `xiaoyuzhou` | (see `--help`) |126| Spotify | `spotify` | (see `--help`) |127| YouTube | `youtube` | (see `--help`) |128| Weixin Official Account | `weixin` | (see `--help` — `drafts` is read; `create-draft` is write) |129| Toutiao | `toutiao` | `articles` |130| Government policy / law | `gov-policy`, `gov-law` | (see `--help`) |131| Web download / reader | `web` | `read`, `download` |132133For anything not listed, run `opencli list -f json` and filter.134135---136137## Step 4: Check the Adapter's Strategy Before Running138139Run `opencli list -f json` (or `opencli <site> <command> --help`) and read the `strategy` field:140141| Strategy | What it means | Preconditions |142|---|---|---|143| `PUBLIC` | Pure HTTP; no browser needed | None |144| `LOCAL` | Talks to a local endpoint | Local service running |145| `COOKIE` / `HEADER` | Reuses your Chrome login for the site | Chrome logged into the site + Browser Bridge extension loaded |146| `INTERCEPT` | Opens an automation window to capture a signed request | Same as COOKIE; be patient — may take several seconds |147| `UI` | Full DOM interaction | Same as COOKIE; slowest; results depend on the site's current layout |148149If the user doesn't have a login and the adapter's strategy is not `PUBLIC` / `LOCAL`, tell them they need to log into the site in Chrome before retrying.150151---152153## Step 5: Execute the Command154155### General pattern156157```bash158opencli <site> <command> [positional-args] [flags] -f json159```160161### Universal flags162163| Flag | Effect |164|---|---|165| `-f json` | Structured JSON — always prefer this for agent processing |166| `-f yaml` / `-f csv` / `-f md` / `-f table` / `-f plain` | Other formats |167| `-v` | Verbose logging (also sets `OPENCLI_VERBOSE=1`) |168| `--live` | Keep the automation window open after the command (browser-backed adapters only) |169| `--focus` | Open the automation window in the foreground (browser-backed adapters only) |170171Command-specific flags (`--limit`, `--filter`, `--type`, etc.) are **not** universal — always check `opencli <site> <command> --help`.172173### Examples174175```bash176# Yahoo Finance quote (PUBLIC)177opencli yahoo-finance quote AAPL -f json178179# Reddit hot posts in a subreddit (COOKIE or PUBLIC depending on subreddit)180opencli reddit subreddit wallstreetbets --limit 20 -f json181opencli reddit search "SPY options" --limit 15 -f json182183# HackerNews top (PUBLIC)184opencli hackernews top --limit 20 -f json185186# Eastmoney hot rank (PUBLIC)187opencli eastmoney hot-rank -f json188189# Xueqiu hot stocks (PUBLIC or COOKIE)190opencli xueqiu hot-stock -f json191opencli xueqiu stock SH600519 -f json192193# Bloomberg markets headlines (COOKIE)194opencli bloomberg markets -f json195196# arXiv paper search (PUBLIC)197opencli arxiv search "volatility surface" --limit 10 -f json198199# Substack feed200opencli substack feed --limit 20 -f json201202# Web page → readable markdown (PUBLIC)203opencli web read "https://example.com/article" -f json204```205206### Key rules2072081. **Always use `opencli <site> <command> --help`** before constructing a command you haven't run this session — don't assume flag names.2092. **Use `-f json`** for programmatic processing.2103. **Start with a small `--limit`** (10–20) to validate the shape before pulling more.2114. **Check `strategy` before running a browser-backed adapter** — if the user isn't logged in, a `COOKIE` / `UI` adapter will fail.2125. **NEVER execute write operations.** Common write command names to avoid across adapters: `post`, `reply`, `comment`, `like`, `unlike`, `upvote`, `save`, `subscribe`, `unsubscribe`, `follow`, `unfollow`, `block`, `unblock`, `delete`, `bookmark`, `unbookmark`, `send`, `create-draft`, `reply-dm`, `accept`. If you're unsure whether a command is read or write, check the `description` in `opencli list -f json`; if it suggests a mutation, skip it.213214---215216## Step 6: Handle Failures217218If a command returns empty or errors out, the site may have changed its selectors / API. opencli has a built-in self-repair loop:219220```bash221# Re-run with diagnostic context222OPENCLI_DIAGNOSTIC=1 opencli <site> <command> <args>223```224225This emits a structured `RepairContext` that identifies the failing adapter's source path. Possible responses:2262271. If the user has the `opencli-autofix` skill installed, tell them to run that skill.2282. If not, suggest they file an issue at https://github.com/jackwener/opencli/issues with the `RepairContext` output.2293. Don't silently fall back to hand-rolled scraping — that hides the bug from the upstream registry.230231Rate limits on the target site can also cause empty results; wait and retry.232233---234235## Step 7: Present the Results2362371. **Summarize the data** for the user's actual question, don't just dump the raw JSON.2382. **Include source attribution** — site name + URL for each item where available.2393. **For market data**, surface price / % change / volume / market cap and flag anomalies.2404. **For news/posts**, highlight headlines, timestamps, and key quotes.2415. **For research (arXiv, Scholar)**, include title, authors, abstract, and link.2426. **Treat browser sessions as private** — never echo CDP endpoints, cookies, or auth tokens.243244---245246## Reference Files247248- `references/discovery.md` — How to navigate `opencli list`, `opencli <site> --help`, and the JSON schema of registry entries249- `references/finance-sources.md` — Detailed notes on the finance-heavy adapters (Yahoo Finance, Bloomberg, Eastmoney, Xueqiu, Barchart, Reuters, Reddit, HackerNews) and which commands are read vs write250251Read these reference files when you need concrete examples for a specific site, or when the user asks for a capability not covered by one of the dedicated readers.