skills/agent-reach-internet-access/SKILL.md
```markdown --- name: agent-reach-internet-access description: Give AI agents internet access to Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu and more — one CLI, zero API fees. triggers: - give my agent internet access - install agent reach - help my AI search twitter reddit youtube - set up web scraping for my agent - agent reach setup and configuration - read tweets without paying for API - scrape social media for my AI agent - configure agent reach platforms --- #
npx skillsauth add aradotso/trending-skills skills/agent-reach-internet-accessInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
---
name: agent-reach-internet-access
description: Give AI agents internet access to Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu and more — one CLI, zero API fees.
triggers:
- give my agent internet access
- install agent reach
- help my AI search twitter reddit youtube
- set up web scraping for my agent
- agent reach setup and configuration
- read tweets without paying for API
- scrape social media for my AI agent
- configure agent reach platforms
---
# Agent Reach
> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.
Agent Reach is a scaffolding tool that gives AI coding agents (Claude Code, Cursor, Windsurf, etc.) the ability to read and search the internet — Twitter/X, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu, WeChat, Weibo, RSS, and more — using free upstream CLI tools, zero paid APIs.
## Installation
### One-liner (recommended — tell your agent)
帮我安装 Agent Reach:https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md
Or in English:
Install Agent Reach for me: https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md
### Manual install
```bash
pip install agent-reach
Install Agent Reach (safe mode): https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md
Use the --safe flag
帮我更新 Agent Reach:https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/update.md
pip install agent-reachgh CLI, mcporter, xreachSKILL.md in agent's skills directory# Check all channel statuses
agent-reach doctor
# Diagnose a specific channel
agent-reach doctor --channel twitter
# List all available channels
agent-reach channels
# Show version
agent-reach --version
| Platform | Works Out of Box | Needs Config | |---|---|---| | 🌐 Web pages | ✅ Jina Reader | — | | 📺 YouTube | ✅ subtitles + search | — | | 📡 RSS | ✅ feedparser | — | | 🔍 Web search | ✅ Exa via MCP | — | | 📦 GitHub | ✅ public repos | login for private | | 🐦 Twitter/X | ✅ single tweets | cookie for search/timeline | | 📺 Bilibili | ✅ local machine | proxy for server | | 📖 Reddit | ✅ search via Exa | proxy for full posts | | 📕 XiaoHongShu | ❌ | cookie config required | | 🎵 Douyin | ❌ | MCP config required | | 💼 LinkedIn | ✅ public pages | MCP for full access | | 💬 WeChat 公众号 | ✅ search + full article | — | | 📰 Weibo | ✅ trending, search, user | — | | 💻 V2EX | ✅ posts, nodes, users | — | | 🎙️ 小宇宙 Podcast | ❌ | Whisper key required |
After install, the agent reads SKILL.md and knows which upstream tool to call:
# Read any webpage
curl https://r.jina.ai/https://example.com
# Read a tweet
xreach tweet https://x.com/user/status/123 --json
# Extract YouTube subtitles
yt-dlp --skip-download --write-auto-sub --sub-format json3 "https://youtube.com/watch?v=VIDEO_ID"
# Search YouTube
yt-dlp "ytsearch5:LLM framework comparison 2025" --dump-json
# Read GitHub repo
gh repo view owner/repo-name
# Search GitHub
gh search repos "LLM framework" --language python --sort stars
# Search GitHub issues
gh search issues "bug label:help-wanted" --repo owner/repo
# Read RSS feed
python -c "import feedparser; f = feedparser.parse('https://example.com/feed.xml'); [print(e.title, e.link) for e in f.entries[:5]]"
# Search web (via Exa MCP — agent calls this automatically)
# No direct CLI; agent invokes via MCP tool call
# 1. Install Chrome extension: Cookie-Editor
# 2. Log into twitter.com in browser
# 3. Click Cookie-Editor → Export → Copy JSON
# 4. Tell your agent: "帮我配 Twitter" and paste the cookie JSON
# Agent will save it to the correct location for xreach
Or tell agent: "帮我配 Twitter" — it will guide you step by step.
gh auth login
# Follow interactive prompts: GitHub.com → HTTPS → browser auth
Or tell agent: "帮我登录 GitHub"
# Tell agent: "帮我配小红书"
# Agent will prompt for:
# 1. Cookie-Editor export from xiaohongshu.com
# 2. Starts xiaohongshu-mcp Docker container
Docker-based XHS MCP server:
docker run -d \
-e XHS_COOKIE="$XHS_COOKIE" \
-p 8080:8080 \
ghcr.io/xpzouying/xiaohongshu-mcp:latest
# Tell agent: "帮我配代理"
# Needed only on cloud servers (~$1/month), NOT on local machines
# Agent will configure HTTP_PROXY / HTTPS_PROXY env vars
export HTTP_PROXY=http://your-proxy:port
export HTTPS_PROXY=http://your-proxy:port
# Requires free Whisper API key
# Tell agent: "帮我配小宇宙播客"
export OPENAI_API_KEY=your_whisper_key
Each platform is a pluggable module in channels/:
channels/
├── web.py → Jina Reader (r.jina.ai)
├── twitter.py → xreach CLI
├── youtube.py → yt-dlp
├── github.py → gh CLI
├── bilibili.py → yt-dlp
├── reddit.py → JSON API + Exa MCP
├── xiaohongshu.py → xiaohongshu-mcp (Docker)
├── douyin.py → douyin-mcp-server
├── linkedin.py → linkedin-mcp-server
├── wechat.py → camoufox + miku_ai
├── weibo.py → direct scraping
├── v2ex.py → V2EX public API
├── rss.py → feedparser
├── exa_search.py → mcporter MCP
└── __init__.py → channel registry
Each channel implements a check() method used by agent-reach doctor.
# channels/hackernews.py
from agent_reach.base import BaseChannel
class HackerNewsChannel(BaseChannel):
name = "hackernews"
description = "Read Hacker News stories and comments"
def check(self) -> dict:
"""Returns status dict for agent-reach doctor."""
try:
import urllib.request
urllib.request.urlopen("https://hacker-news.firebaseio.com/v0/topstories.json", timeout=5)
return {"status": "ok", "message": "HN API reachable"}
except Exception as e:
return {"status": "error", "message": str(e)}
def get_top_stories(self, limit: int = 10) -> list:
import urllib.request, json
url = "https://hacker-news.firebaseio.com/v0/topstories.json"
with urllib.request.urlopen(url) as r:
ids = json.loads(r.read())[:limit]
stories = []
for sid in ids:
with urllib.request.urlopen(f"https://hacker-news.firebaseio.com/v0/item/{sid}.json") as r:
stories.append(json.loads(r.read()))
return stories
# Agent workflow for "research LLM frameworks":
# 1. Web search
# → MCP Exa tool call: search("best LLM frameworks 2025")
# 2. GitHub trending
import subprocess
result = subprocess.run(
["gh", "search", "repos", "LLM framework", "--sort", "stars", "--limit", "10", "--json", "name,description,stargazersCount,url"],
capture_output=True, text=True
)
import json
repos = json.loads(result.stdout)
# 3. YouTube tutorials
result = subprocess.run(
["yt-dlp", "ytsearch5:LLM framework tutorial 2025", "--dump-json", "--flat-playlist"],
capture_output=True, text=True
)
# 4. Reddit discussion
# → MCP Exa tool call: search("LLM framework site:reddit.com")
# 5. Read a specific article
import urllib.request
article = urllib.request.urlopen("https://r.jina.ai/https://example.com/llm-article").read().decode()
# Search recent tweets
xreach search "LLM framework" --limit 20 --json
# Get a user's timeline
xreach timeline @username --limit 50 --json
# Read a specific tweet thread
xreach tweet https://x.com/user/status/TWEET_ID --json --thread
# Extract subtitles for summarization
yt-dlp \
--skip-download \
--write-auto-sub \
--sub-lang en \
--sub-format vtt \
--output "/tmp/%(id)s.%(ext)s" \
"https://youtube.com/watch?v=VIDEO_ID"
# Get video metadata
yt-dlp --dump-json "https://youtube.com/watch?v=VIDEO_ID"
# Parse VTT subtitles into clean text
import re
def vtt_to_text(vtt_path: str) -> str:
with open(vtt_path) as f:
content = f.read()
# Remove VTT headers and timestamps
lines = content.split('\n')
text_lines = []
for line in lines:
line = line.strip()
if not line or line.startswith('WEBVTT') or '-->' in line or re.match(r'^\d+$', line):
continue
# Remove HTML tags
line = re.sub(r'<[^>]+>', '', line)
if line:
text_lines.append(line)
return ' '.join(text_lines)
import subprocess, json
# Get trending topics
result = subprocess.run(
["agent-reach", "weibo", "trending"],
capture_output=True, text=True
)
trends = json.loads(result.stdout)
# Search Weibo
result = subprocess.run(
["agent-reach", "weibo", "search", "AI大模型", "--limit", "20"],
capture_output=True, text=True
)
import feedparser
def read_feed(url: str, limit: int = 10) -> list[dict]:
feed = feedparser.parse(url)
return [
{
"title": entry.get("title", ""),
"link": entry.get("link", ""),
"summary": entry.get("summary", ""),
"published": entry.get("published", ""),
}
for entry in feed.entries[:limit]
]
# Usage
hn_feed = read_feed("https://news.ycombinator.com/rss")
arxiv_feed = read_feed("https://export.arxiv.org/rss/cs.AI")
github_trending = read_feed("https://github.com/trending?since=daily")
# Search articles
agent-reach wechat search "AI Agent 2025" --limit 10
# Read full article as Markdown
agent-reach wechat read "https://mp.weixin.qq.com/s/ARTICLE_ID"
# Without this, agent can't run shell commands
openclaw config set tools.profile "coding"
# Or edit ~/.openclaw/openclaw.json:
# { "tools": { "profile": "coding" } }
# Restart gateway
openclaw gateway restart
agent-reach doctor output interpretationagent-reach doctor
# Example output:
# ✅ web Jina Reader reachable
# ✅ youtube yt-dlp v2025.x.x installed
# ✅ github gh CLI authenticated as @username
# ✅ rss feedparser 6.x installed
# ⚠️ twitter xreach installed, no cookie configured
# ❌ bilibili yt-dlp blocked (server IP) — configure proxy
# ❌ reddit proxy required for full access
# ✅ search Exa MCP connected via mcporter
Twitter returns empty results
# Cookie expired — re-export from browser
# 1. Open twitter.com, log in
# 2. Cookie-Editor → Export All → JSON
# 3. Tell agent: "帮我配 Twitter" and paste new cookies
xreach config --cookie-file ~/.xreach/cookies.json
Bilibili blocked on server
# Set proxy environment variables
export HTTP_PROXY=http://proxy-host:port
export HTTPS_PROXY=http://proxy-host:port
# Test
yt-dlp --dump-json "https://www.bilibili.com/video/BV_ID"
yt-dlp outdated (YouTube changes frequently)
pip install -U yt-dlp
# or
yt-dlp -U
gh CLI not authenticated
gh auth login
gh auth status # verify
mcporter / Exa MCP not connecting
# Reinstall mcporter
npm install -g mcporter
# Check Node version (requires 18+)
node --version
# Restart MCP server
mcporter restart exa
XiaoHongShu Docker container down
docker ps | grep xiaohongshu
docker restart xiaohongshu-mcp
# Or re-run with updated cookie:
docker run -d \
-e XHS_COOKIE="$XHS_COOKIE" \
-p 8080:8080 \
ghcr.io/xpzouying/xiaohongshu-mcp:latest
Jina Reader returns garbled content
# Try with Accept header
curl -H "Accept: text/plain" https://r.jina.ai/https://target-url.com
# Or use markdown mode
curl -H "X-Return-Format: markdown" https://r.jina.ai/https://target-url.com
# Proxy (server deployments only)
HTTP_PROXY=http://host:port
HTTPS_PROXY=http://host:port
NO_PROXY=localhost,127.0.0.1
# XiaoHongShu
XHS_COOKIE=<exported cookie JSON string>
# Douyin MCP
DOUYIN_COOKIE=<exported cookie JSON string>
# LinkedIn MCP
[email protected]
LINKEDIN_PASSWORD=$LINKEDIN_PASSWORD # use secret manager
# Podcast transcription (Whisper)
OPENAI_API_KEY=<your key>
# Agent Reach config dir (default: ~/.agent-reach/)
AGENT_REACH_CONFIG_DIR=/custom/path
agent-reach/
├── agent_reach/
│ ├── cli.py # CLI entry point (agent-reach command)
│ ├── doctor.py # Health check logic
│ ├── base.py # BaseChannel interface
│ └── channels/ # One file per platform
├── docs/
│ ├── install.md # Agent-readable install instructions
│ ├── update.md # Agent-readable update instructions
│ └── README_en.md # English README
├── skills/
│ └── SKILL.md # Installed to agent's skills directory
└── pyproject.toml
| Goal | Command/Method |
|---|---|
| Health check | agent-reach doctor |
| Read webpage | curl https://r.jina.ai/URL |
| Read tweet | xreach tweet URL --json |
| Search tweets | xreach search "query" --json |
| YouTube subtitles | yt-dlp --write-auto-sub URL |
| YouTube search | yt-dlp "ytsearch5:query" --dump-json |
| GitHub repo | gh repo view owner/repo |
| GitHub search | gh search repos "query" |
| Read RSS | feedparser.parse(url) |
| Web search | Exa via MCP (automatic) |
| Update all tools | agent-reach update |
| Configure platform | Tell agent: "帮我配 [platform]" |
development
```markdown --- name: compose-performance-skills description: Install and use the skydoves/compose-performance-skills agent skill library to diagnose and fix Jetpack Compose performance issues including stability, recomposition, lazy layouts, modifiers, side effects, and build configuration. triggers: - "my composable recomposes too often" - "LazyColumn drops frames during scroll" - "diagnose Compose stability issues" - "fix unnecessary recomposition in Jetpack Compose" - "optimize Com
development
Headless iOS Simulator manager with host-side HID input injection, 60fps streaming, and device farm web UI for iOS 26
development
```markdown --- name: claude-code-game-studios description: Turn Claude Code into a full 49-agent game dev studio with 72 workflow skills, automated hooks, and a real studio hierarchy for Godot, Unity, and Unreal projects. triggers: - "set up claude code game studios" - "use ai agents for game development" - "set up game dev studio with claude" - "add game studio agents to my project" - "how do I use claude code for game dev" - "set up godot unity unreal ai workflow" - "49 agents g
development
```markdown --- name: xq-py-quantum-vm description: Python implementation of the Quip Network's quantum virtual machine (xqvm) triggers: - quantum virtual machine python - xqvm quip network - quantum circuit simulation python - xq-py quantum vm - quip network quantum python - simulate quantum gates python - quantum vm xqvm - xqvm-py quantum circuit --- # xq-py Quantum Virtual Machine > Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection. `xqvm-py` is a Python impl