| name | agent-reach |
| description | Internet access for AI agents: read/search/interact with 16+ platforms — Twitter/X, YouTube, Bilibili, Reddit, GitHub, XiaoHongShu (小红书), Douyin (抖音), WeChat Articles (微信公众号), Weibo (微博), LinkedIn, Boss直聘, RSS, Exa web search, Scrapling (stealth scraping), and any web page. Use when: (1) user asks to search/read any of these platforms, (2) user shares a URL from a supported platform, (3) user asks to search the web or research a topic, (4) user asks to post/comment/interact on supported platforms, (5) user needs to scrape a site with anti-bot protection. Triggers: 搜推特, 搜小红书, 看视频, 搜一下, 上网搜, 帮我查, 全网搜索, search twitter, youtube transcript, search reddit, read this link, B站, 抖音, 微信文章, 公众号, LinkedIn, RSS, web search, scrape, 爬取, 抓取, bypass cloudflare. |
| metadata | {"openclaw":{"emoji":"🌐","requires":{"anyBins":["curl","yt-dlp","xreach","gh","mcporter"]},"install":[{"id":"yt-dlp","kind":"brew","formula":"yt-dlp","bins":["yt-dlp"],"label":"Install yt-dlp (YouTube/Bilibili)"},{"id":"xreach","kind":"node","package":"xreach-cli","bins":["xreach"],"label":"Install xreach (Twitter/X)"},{"id":"mcporter","kind":"node","package":"mcporter","bins":["mcporter"],"label":"Install mcporter (MCP tool bridge)"},{"id":"scrapling","kind":"pip","package":"scrapling[all]","bins":[],"label":"Install Scrapling (stealth web scraping)"}]}} |
Agent Reach — Internet Access Tools
Upstream tools for 16+ platforms. Call them directly via shell commands.
Run openclaw agent-reach doctor to check which platforms are available.
Workspace Rules
Never create files in the agent workspace. Use /tmp/ for temporary output and ~/.agent-reach/ for persistent data.
Web — Any URL
curl -s "https://r.jina.ai/URL"
Returns clean Markdown of any web page. No API key needed.
Scrapling — Stealth Web Scraping
For sites with anti-bot protection (Cloudflare, WAF) or dynamic JS pages. Use when curl/Jina fails.
Fast fetch (no browser, impersonates browser fingerprint):
python3 -c "
from scrapling import Fetcher
page = Fetcher().get('URL')
print(page.get_all_text())
"
Stealth fetch (real browser, bypasses most anti-bot):
python3 -c "
from scrapling import StealthyFetcher
page = StealthyFetcher().fetch('URL', headless=True, network_idle=True)
print(page.get_all_text())
"
Cloudflare-protected sites:
python3 -c "
from scrapling import StealthyFetcher
page = StealthyFetcher().fetch('URL', headless=True, solve_cloudflare=True)
print(page.get_all_text())
"
Dynamic JS pages (SPA/React/Vue):
python3 -c "
from scrapling import PlayWrightFetcher
page = PlayWrightFetcher().fetch('URL', network_idle=True, disable_resources=True)
print(page.get_all_text())
"
Extract specific elements with CSS selectors:
python3 -c "
from scrapling import Fetcher
page = Fetcher().get('URL')
for item in page.css('.target-class'):
print(item.text)
"
With proxy:
python3 -c "
from scrapling import StealthyFetcher
page = StealthyFetcher().fetch('URL', headless=True, proxy='http://user:pass@host:port')
print(page.get_all_text())
"
Install: pip3 install "scrapling[all]" && scrapling install
Use Scrapling when curl/Jina Reader returns 403/503 or empty content due to anti-bot protection.
Web Search (Exa)
mcporter call 'exa.web_search_exa(query: "query", numResults: 5)'
mcporter call 'exa.get_code_context_exa(query: "code question", tokensNum: 3000)'
AI-powered semantic search. Free, no API key. Requires mcporter + Exa MCP config.
Twitter/X (xreach)
xreach search "query" -n 10 --json
xreach tweet URL_OR_ID --json
xreach tweets @username -n 20 --json
xreach thread URL_OR_ID --json
Requires Cookie auth. Configure with: xreach auth login
YouTube (yt-dlp)
yt-dlp --dump-json "URL"
yt-dlp --write-sub --write-auto-sub --sub-lang "zh-Hans,zh,en" --skip-download -o "/tmp/%(id)s" "URL"
yt-dlp --dump-json "ytsearch5:query"
Bilibili / B站 (yt-dlp)
yt-dlp --dump-json "https://www.bilibili.com/video/BVxxx"
yt-dlp --write-sub --write-auto-sub --sub-lang "zh-Hans,zh,en" --convert-subs vtt --skip-download -o "/tmp/%(id)s" "URL"
Server IPs may get 412. Use --cookies-from-browser chrome or configure proxy.
Reddit
curl -s "https://www.reddit.com/r/SUBREDDIT/hot.json?limit=10" -H "User-Agent: agent-reach/1.0"
curl -s "https://www.reddit.com/search.json?q=QUERY&limit=10" -H "User-Agent: agent-reach/1.0"
Server IPs may get 403. Use Exa search as alternative, or configure proxy.
GitHub (gh CLI)
gh search repos "query" --sort stars --limit 10
gh repo view owner/repo
gh search code "query" --language python
gh issue list -R owner/repo --state open
gh issue view 123 -R owner/repo
XiaoHongShu / 小红书 (mcporter)
mcporter call 'xiaohongshu.search_feeds(keyword: "query")'
mcporter call 'xiaohongshu.get_feed_detail(feed_id: "xxx", xsec_token: "yyy")'
mcporter call 'xiaohongshu.get_feed_detail(feed_id: "xxx", xsec_token: "yyy", load_all_comments: true)'
mcporter call 'xiaohongshu.publish_content(title: "标题", content: "正文", images: ["/path/img.jpg"], tags: ["tag"])'
Requires Docker + Cookie login. Use Cookie-Editor browser extension to export cookies.
Douyin / 抖音 (mcporter)
mcporter call 'douyin.parse_douyin_video_info(share_link: "https://v.douyin.com/xxx/")'
mcporter call 'douyin.get_douyin_download_link(share_link: "https://v.douyin.com/xxx/")'
No login needed. Requires mcporter + douyin-mcp-server.
WeChat Articles / 微信公众号
Search (miku_ai):
python3 -c "
import asyncio
from miku_ai import get_wexin_article
async def s():
for a in await get_wexin_article('query', 5):
print(f'{a[\"title\"]} | {a[\"url\"]}')
asyncio.run(s())
"
Read (Camoufox — bypasses WeChat anti-bot):
cd ~/.agent-reach/tools/wechat-article-for-ai && python3 main.py "https://mp.weixin.qq.com/s/ARTICLE_ID"
WeChat articles cannot be read with Jina Reader or curl. Must use Camoufox.
Weibo / 微博 (mcporter)
mcporter call 'weibo.get_hot_searches()'
mcporter call 'weibo.search_content(keyword: "query", count: 10)'
mcporter call 'weibo.search_users(keyword: "name", count: 10)'
mcporter call 'weibo.get_user_timeline(uid: "user_id", count: 10)'
LinkedIn (mcporter)
mcporter call 'linkedin.get_person_profile(linkedin_url: "https://linkedin.com/in/username")'
mcporter call 'linkedin.search_people(keyword: "AI engineer", limit: 10)'
Fallback: curl -s "https://r.jina.ai/https://linkedin.com/in/username"
Stealth fallback (if blocked): python3 -c "from scrapling import StealthyFetcher; print(StealthyFetcher().fetch('https://linkedin.com/in/username', headless=True).get_all_text())"
Boss直聘 (mcporter)
mcporter call 'bosszhipin.get_recommend_jobs_tool(page: 1)'
mcporter call 'bosszhipin.search_jobs_tool(keyword: "Python", city: "北京")'
Fallback: curl -s "https://r.jina.ai/https://www.zhipin.com/job_detail/xxx"
Stealth fallback (if blocked): python3 -c "from scrapling import StealthyFetcher; print(StealthyFetcher().fetch('https://www.zhipin.com/job_detail/xxx', headless=True).get_all_text())"
RSS
python3 -c "
import feedparser
for e in feedparser.parse('FEED_URL').entries[:5]:
print(f'{e.title} — {e.link}')
"
Xiaoyuzhou Podcast / 小宇宙播客
ffmpeg -i "AUDIO_URL" -f segment -segment_time 300 /tmp/segment_%03d.mp3
Troubleshooting
- Channel not working? Run
openclaw agent-reach doctor for status and fix instructions.
- Twitter fetch failed? Ensure
undici is installed: npm install -g undici.
- Bilibili 412? Use
--cookies-from-browser chrome or set proxy.
- Reddit 403? Use Exa web search instead, or configure a residential proxy.
Setting Up a Channel ("帮我配 XXX")
If a channel needs setup (cookies, Docker, etc.), fetch the upstream install guide:
https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md