| name | opencli-rs-web-scraper |
| description | Blazing fast Rust CLI tool to fetch information from 55+ websites (Twitter, Reddit, YouTube, Bilibili, Zhihu, etc.) with a single command, plus AI-native discovery and Electron app control. |
| triggers | ["fetch data from twitter using opencli","scrape website with opencli-rs","get hacker news top stories command line","control cursor app from terminal","fetch bilibili trending videos cli","integrate github docker kubectl with opencli","generate yaml adapter for website scraping","install opencli-rs rust web fetcher"] |
opencli-rs Web Scraper & Site Fetcher
Skill by ara.so โ Daily 2026 Skills collection.
opencli-rs is a single 4.7MB Rust binary that fetches real-time data from 55+ websites (Twitter/X, Reddit, YouTube, HackerNews, Bilibili, Zhihu, Xiaohongshu, and more) with one command. It reuses your browser session via a Chrome extension, supports AI-native API discovery, controls Electron desktop apps (Cursor, ChatGPT, Notion), and passes through to external CLIs (gh, docker, kubectl). Up to 12x faster and 10x less memory than the Node.js original.
Installation
One-line (macOS / Linux)
curl -fsSL https://raw.githubusercontent.com/nashsu/opencli-rs/main/scripts/install.sh | sh
Windows (PowerShell)
Invoke-WebRequest -Uri "https://github.com/nashsu/opencli-rs/releases/latest/download/opencli-rs-x86_64-pc-windows-msvc.zip" -OutFile opencli-rs.zip
Expand-Archive opencli-rs.zip -DestinationPath .
Move-Item opencli-rs.exe "$env:LOCALAPPDATA\Microsoft\WindowsApps\"
Build from Source
git clone https://github.com/nashsu/opencli-rs.git
cd opencli-rs
cargo build --release
cp target/release/opencli-rs /usr/local/bin/
Chrome Extension (required for Browser-mode commands)
- Download
opencli-rs-chrome-extension.zip from GitHub Releases
- Extract to any directory
- Open
chrome://extensions โ enable Developer mode โ Load unpacked โ select the extracted folder
- Extension auto-connects to the opencli-rs daemon
AI Agent Skill Install
npx skills add https://github.com/nashsu/opencli-rs-skill
Command Modes
| Mode | Requirement | Examples |
|---|
| Public | Nothing โ calls public APIs directly | hackernews, devto, arxiv, wikipedia |
| Browser | Chrome + extension running | twitter, bilibili, reddit, zhihu |
| Desktop | Target Electron app running | cursor, chatgpt, notion, discord |
Key Commands
Global Flags
opencli-rs --help
opencli-rs <site> --help
opencli-rs <site> <cmd> --format json
opencli-rs <site> <cmd> --limit 20
opencli-rs doctor
opencli-rs completion bash >> ~/.bashrc
Public Commands (no browser needed)
opencli-rs hackernews top --limit 10
opencli-rs hackernews search "rust async" --limit 5
opencli-rs hackernews user pg
opencli-rs arxiv search "large language models" --limit 10
opencli-rs arxiv paper 2303.08774
opencli-rs wikipedia summary "Rust programming language"
opencli-rs wikipedia search "memory safety"
opencli-rs wikipedia random
opencli-rs stackoverflow hot
opencli-rs stackoverflow search "tokio async runtime"
opencli-rs devto top
opencli-rs devto tag rust
opencli-rs linux-do hot
opencli-rs linux-do search "Rust"
Browser Commands (Chrome extension required)
opencli-rs twitter search "rust lang" --limit 10
opencli-rs twitter trending
opencli-rs twitter timeline
opencli-rs twitter bookmarks
opencli-rs twitter profile elonmusk
opencli-rs twitter post "Hello from opencli-rs!"
opencli-rs twitter follow rustlang
opencli-rs bilibili hot --limit 20
opencli-rs bilibili search "Rustๆ็จ"
opencli-rs bilibili ranking
opencli-rs bilibili feed
opencli-rs bilibili download <video_url>
opencli-rs reddit frontpage
opencli-rs reddit popular
opencli-rs reddit subreddit rust
opencli-rs reddit search "async await"
opencli-rs reddit upvote <post_id>
opencli-rs zhihu hot
opencli-rs zhihu search "Rust ๅ
ๅญๅฎๅ
จ"
opencli-rs zhihu question 12345
opencli-rs xiaohongshu search "ๆ
่กๆป็ฅ"
opencli-rs xiaohongshu feed
opencli-rs xiaohongshu user <user_id>
opencli-rs youtube search "rust tutorial"
opencli-rs youtube video <video_id>
opencli-rs youtube transcript <video_id>
opencli-rs weibo hot
opencli-rs weibo search "็งๆ"
opencli-rs douban top250
opencli-rs douban search "ไธไฝ"
opencli-rs douban movie-hot
opencli-rs medium search "rust programming"
opencli-rs medium feed
opencli-rs medium user graydon_hoare
opencli-rs xueqiu hot-stock
opencli-rs xueqiu search "่
ๅฐ"
opencli-rs xueqiu stock SH600519
Desktop App Control (Electron)
opencli-rs cursor status
opencli-rs cursor send "Refactor this function to use async/await"
opencli-rs cursor read
opencli-rs cursor ask "What does this code do?"
opencli-rs cursor screenshot
opencli-rs cursor extract-code
opencli-rs cursor model
opencli-rs chatgpt new
opencli-rs chatgpt send "Explain Rust lifetimes"
opencli-rs chatgpt read
opencli-rs notion search "project notes"
opencli-rs notion read <page_id>
opencli-rs notion write <page_id> "New content"
opencli-rs notion sidebar
opencli-rs discord-app channels
opencli-rs discord-app send "Hello team"
opencli-rs discord-app read
External CLI Passthrough
opencli-rs gh repo list
opencli-rs gh pr list
opencli-rs gh issue create --title "Bug report"
opencli-rs docker ps
opencli-rs docker images
opencli-rs docker logs my-container
opencli-rs kubectl get pods
opencli-rs kubectl get services -n production
opencli-rs kubectl logs <pod-name>
AI Discovery Commands
opencli-rs explore https://example.com
opencli-rs cascade https://api.example.com/data
opencli-rs generate https://example.com --goal "hot posts"
opencli-rs synthesize https://news.example.com
Output Formats
opencli-rs hackernews top --limit 5
opencli-rs hackernews top --limit 5 --format json | jq '.[].title'
opencli-rs hackernews top --format yaml
opencli-rs hackernews top --format csv > hn_top.csv
opencli-rs hackernews top --format markdown
Declarative YAML Pipeline (Custom Adapters)
Add new site adapters without writing Rust code. Create a YAML file describing the scraping pipeline:
name: my-site
description: Fetch top posts from my-site
base_url: https://api.my-site.com
commands:
top:
description: Get top posts
endpoint: /v1/posts/top
method: GET
params:
limit:
flag: --limit
default: 10
query_param: count
response:
items_path: $.data.posts
fields:
- name: title
path: $.title
- name: url
path: $.url
- name: score
path: $.points
- name: author
path: $.author.name
opencli-rs my-site top --limit 20
opencli-rs my-site top --format json
Real-World Patterns
Pipe JSON output to jq for filtering
opencli-rs hackernews top --limit 20 --format json | jq -r '.[].title'
opencli-rs twitter trending --format json | jq -r '.[].name'
opencli-rs bilibili ranking --format json | jq '[.[] | select(.view > 1000000)]'
Shell scripting
#!/bin/bash
echo "=== HackerNews Top 5 ==="
opencli-rs hackernews top --limit 5 --format table
echo ""
echo "=== Bilibili Trending ==="
opencli-rs bilibili hot --limit 5 --format table
echo ""
echo "=== Zhihu Hot ==="
opencli-rs zhihu hot --limit 5 --format table
Export to file
opencli-rs reddit popular --format csv > reddit_$(date +%Y%m%d).csv
opencli-rs hackernews top --format json > hn_top.json
Use in Rust project via subprocess
use std::process::Command;
use serde_json::Value;
fn fetch_hn_top(limit: u32) -> anyhow::Result<Vec<Value>> {
let output = Command::new("opencli-rs")
.args(["hackernews", "top", "--limit", &limit.to_string(), "--format", "json"])
.output()?;
let json: Vec<Value> = serde_json::from_slice(&output.stdout)?;
Ok(json)
}
fn fetch_twitter_search(query: &str) -> anyhow::Result<Vec<Value>> {
let output = Command::new("opencli-rs")
.args(["twitter", "search", query, "--format", "json"])
.output()?;
if !output.status.success() {
let err = String::from_utf8_lossy(&output.stderr);
anyhow::bail!("opencli-rs error: {}", err);
}
: <Value> = serde_json::(&output.stdout)?;
(json)
}
() anyhow::<()> {
= ()?;
&stories {
(, story[].().());
}
(())
}
AI Agent integration (AGENT.md / .cursorrules)
# AGENT.md
## Available Tools
Run `opencli-rs list` to discover all available commands.
### Web Data Fetching
- `opencli-rs hackernews top --format json` โ HN top stories
- `opencli-rs twitter search "<query>" --format json` โ Twitter search
- `opencli-rs arxiv search "<topic>" --format json` โ Research papers
- `opencli-rs reddit subreddit <name> --format json` โ Subreddit posts
### Local CLI Tools
- `opencli-rs gh <args>` โ GitHub operations
- `opencli-rs docker <args>` โ Docker operations
- `opencli-rs kubectl <args>` โ Kubernetes operations
Register custom tools: `opencli-rs register mycli`
Configuration
Config file location
~/.config/opencli-rs/config.toml # macOS / Linux
%APPDATA%\opencli-rs\config.toml # Windows
Custom adapter directory
adapter_dir = "~/.config/opencli-rs/adapters"
default_format = "table"
default_limit = 20
Register a custom external CLI
opencli-rs register mycli
opencli-rs mycli --help
opencli-rs mycli some-command --flag value
Troubleshooting
Run diagnostics first
opencli-rs doctor
Chrome extension not connecting
opencli-rs doctor
Browser command returns empty / auth error
- Open Chrome and ensure you are logged in to the target site
- The extension reuses your existing browser session โ no tokens needed
- Try refreshing the target site tab, then retry the command
Binary not found after install
which opencli-rs
ls /usr/local/bin/opencli-rs
export PATH="/usr/local/bin:$PATH"
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshrc
Build errors from source
rustup update stable
rustup target add aarch64-apple-darwin
cargo build --release
Command slow or timing out
- Browser commands require Chrome + extension; without it they will hang
- Run
opencli-rs doctor to verify extension connectivity
- Public commands (hackernews, arxiv, etc.) need no browser and run in ~1-2s
Windows path issues
# Verify binary location
Get-Command opencli-rs
# If not found, ensure the directory is in $env:PATH
$env:PATH += ";$env:LOCALAPPDATA\Microsoft\WindowsApps"
Supported Sites Reference
| Category | Sites |
|---|
| Tech News | HackerNews, Dev.to, Lobsters, Linux-do |
| Social | Twitter/X, Reddit, Facebook, Instagram, TikTok, Jike |
| Video | YouTube, Bilibili, Weixin |
| Chinese | Zhihu, Xiaohongshu, Weibo, Douban, Xueqiu, Weread, Sinablog, Sinafinance |
| Research | arXiv, Hugging Face |
| Finance | Yahoo Finance, Barchart, Xueqiu |
| Jobs | Boss, LinkedIn |
| Reading | Medium, Substack, Wikipedia, BBC, Bloomberg, Reuters |
| Shopping | Steam, SMZDM, Ctrip, Coupang |
| AI/Desktop | Cursor, ChatGPT, Codex, Doubao, ChatWise, Notion, Discord |
| Podcast | Apple Podcasts, Xiaoyuzhou |
| External CLI | gh, docker, kubectl, obsidian, readwise, gws |