Automatically collects great social media content, organizes it with AI, and stores it in Feishu Docs.
Trigger Conditions
Automatically triggered when the user sends the following:
- Link: X/Twitter, Jike, WeChat Official Accounts, Reddit, Zhihu, Bilibili, Hacker News, etc.
- Image: Screenshot (extract links after OCR recognition)
- Mixed: Link + screenshot
Dependent Skills
Important: This skill does not directly call external scripts or paths; instead, it outputs guidance, and the Agent calls the corresponding skill at runtime. The following are the skills actually used in the current environment; please ensure they are installed.
Required Skills
| Skill | Purpose | Installation Location |
|---|---|---|
| feishu-doc | Read and write Feishu Docs (append content, read existing content for deduplication) | ~/.agents/skills/feishu-doc* |
| defuddle | General web page body extraction (WeChat Official Accounts, Jike, Reddit, Zhihu, etc.) | ~/.opencode/skills/defuddle/ |
Recommended Skills (by platform)
| Skill | Purpose | Installation Location |
|---|---|---|
| x-tweet-fetcher | X/Twitter tweets, articles, timeline extraction (zero-dependency FxTwitter API) | ~/.opencode/skills/x-tweet-fetcher/ |
| web-content-fetcher | WeChat Official Account scraping (Scrapling solution, perfectly bypasses anti-scraping) | ~/.openclaw/workspace/skills/web-content-fetcher/ |
| baoyu-url-to-markdown | General URL to Markdown (fallback solution) | ~/.opencode/skills/baoyu-url-to-markdown/ |
Optional Skills
| Skill | Purpose |
|---|---|
| feishu-cron-reminder | Daily scheduled reminder to check collected content |
| feishu-send-file | Send collected export files to a Feishu group |
Optional Local Dependencies
| Dependency | Purpose | Installation Method |
|---|---|---|
| pytesseract + pillow | Local image OCR | pip install pytesseract pillow |
| tesseract-ocr | OCR engine | macOS: brew install tesseract; Linux: apt-get install tesseract-ocr tesseract-ocr-chi-sim |
Workflow
用户发送链接/图片
→ 平台检测 (extract_content.py)
→ 去重检查 (deduplicate.py)
→ Agent 调用对应 skill 提取内容
→ AI 整理成结构化格式
→ 格式化 (append_to_feishu.py)
→ Agent 调用 feishu-doc 追加到文档
Step 1: Platform Detection
Run extract_content.py to detect the link source and obtain the recommended skill and extraction method:
python3 scripts/extract_content.py "https://x.com/user/status/123"
Example output:
{
"platform_id": "twitter",
"platform_label": "X/Twitter",
"url": "https://x.com/user/status/123",
"skill": "x-tweet-fetcher",
"fallback_skills": [],
"note": "使用 x-tweet-fetcher skill 提取推文/文章内容"
}
Supported Platform Mapping:
| Platform | Domain | Preferred Skill | Fallback |
|---|---|---|---|
| X/Twitter | x.com, twitter.com | x-tweet-fetcher | — |
| WeChat Official Accounts | mp.weixin.qq.com | web-content-fetcher (Scrapling) | defuddle |
| Jike | okjike.com, jike.cn | defuddle | baoyu-url-to-markdown |
| reddit.com | defuddle | baoyu-url-to-markdown | |
| Hacker News | news.ycombinator.com | defuddle | — |
| Zhihu | zhihu.com | defuddle | baoyu-url-to-markdown |
| Bilibili | bilibili.com, b23.tv | defuddle | baoyu-url-to-markdown |
| Other | * | defuddle | baoyu-url-to-markdown |
Step 2: Deduplication Check
python3 scripts/deduplicate.py "https://x.com/user/status/123"
Check methods:
- Local cache:
.cache/collected_urls.json - Document check: Pass in the Feishu document content file for matching
- URL normalization: Automatically remove tracking parameters such as utm_source, fbclid, etc.
Step 3: Content Extraction
Based on the output of Step 1, the Agent calls the corresponding skill to extract content. For example:
- X/Twitter: Call
x-tweet-fetcherskill - WeChat Official Accounts: Call
defuddleskill - Other platforms: Call
defuddleorbaoyu-url-to-markdownskill
The Agent is responsible for calling skills; this skill's scripts only perform detection and formatting, and do not directly call external skills.
Platform-specific tips(embedded in the selectors field of extract_content.py):
- WeChat Official Accounts CSS selectors:
#activity-name(title),#js_name(author),#js_content(body),#publish_time(time) - Immediately CSS selectors:
meta[property="og:title"](author),meta[property="og:description"](content),time(time) - Reddit: Supports JSON API, append
.jsonto the end of the URL to get structured data
Step 4: AI Organization
After extracting the raw content, the AI organizes it into structured information:
- Title: content title
- Source: author/platform
- Category: categorized by content type
- Summary content: AI-generated summary, summarizing the core content in 3-5 sentences
- Original link: original link
- Original file: Feishu cloud space .md file link
Step 5: Save to Bitable (recommended)
Optimized process(v1.4.0):
1. 抓取内容 → 保存为 .md 文件
2. 上传到飞书云空间 → 获取文件链接
3. LLM 只输出短字段(标题、来源、分类、摘要内容)
4. 写入多维表格,原文通过文件链接跳转
Agent workflow:
- Call the corresponding skill to scrape content
- Save as a local
.mdfile (e.g./tmp/content_{id}.md) - Call
feishu_drive_file uploadto upload to cloud space - Get the file link (e.g.
https://my.feishu.cn/file/xxx) - Call
feishu_bitable_app_table_recordto write to Bitable
Advantages:
- ✅ Cost-saving: the LLM does not output long text content
- ✅ Stable: file content is complete and will not be truncated
- ✅ Viewable: open .md files directly in Feishu
- ✅ Searchable: summary content + title are searchable
Field structure:
| Field | Type | Purpose |
|---|---|---|
| Title | Text | Searchable |
| Source | Text | Filterable |
| Category | Single select | Filterable |
| Original link | Hyperlink | Original source |
| Summary content | Text | AI-generated summary, searchable |
| Record time | Created time | Automatically recorded |
| Original file | Hyperlink | Feishu cloud space .md file |
Bitable configuration:
- App Token:
ND8ObCuSya5Dv3sREZYc03Ilngh - Table ID:
tblaHDM5kjtikIl9
Step 5 (alternative): Format as a Markdown document
If you need to save to a regular Feishu document (not Bitable), use:
python3 scripts/append_to_feishu.py '<json_content>'
Output as formatted Markdown, for the Agent to call feishu-doc's append operation to write to the document.
Step 6: Image OCR (optional)
When the user sends a screenshot instead of a link:
python3 scripts/ocr_image.py /path/to/image.png
- If pytesseract is installed locally → perform OCR directly
- Otherwise → return the image path and prompt the Agent to use an external OCR service
- After recognition, automatically extract the URL from the text and return to Step 1
Script list
| Script | Purpose | Directly usable |
|---|---|---|
scripts/extract_content.py |
Platform detection + skill routing | ✅ Runs independently |
scripts/deduplicate.py |
URL deduplication (local cache + document matching) | ✅ Runs independently |
scripts/append_to_feishu.py |
Format content as Feishu Markdown (alternative) | ✅ Runs independently |
scripts/ocr_image.py |
Image OCR (requires pytesseract or an external service) | ⚠️ Optional dependency required |
Note: No longer needed after v1.4.0
save_to_bitable.py, switched to the Feishu Cloud Space upload approach.
Deduplication mechanism
URL normalization
Automatically removes the following tracking parameters:
utm_source,utm_medium,utm_campaign,utm_term,utm_contentfbclid,gclidref,source
Cache storage
.cache/collected_urls.json
{
"https://x.com/user/status/123": {
"original_url": "https://x.com/...",
"date": "2026-03-14T10:00:00",
"metadata": {...}
}
}
Configuration
Feishu document Token: A document is created on first use, and subsequent entries are appended to the same document.
Suggested document title:社交内容收藏 - 每日精选
Daily reminder(optional, requires the feishu-cron-reminder skill): Every day at 18:00, push the day's bookmark count, title list, and document link.
Changelog
v1.4.0 (2026-03-18)
- 🎉 Long text optimization: The original text is uploaded to Feishu Cloud Space, and the link is stored in the URL field
- ✅ Added the "Original File" field, renamed "Original Content" to "Summary Content"
- ✅ The LLM no longer outputs long text, greatly saving tokens
- ✅ The original text can be viewed by jumping through the Feishu file link, supporting the .md format
v1.3.0 (2026-03-17)
- 🎉 WeChat Official Account scraping capability upgrade: Switched to the Scrapling approach, perfectly bypassing WeChat anti-scraping
- 🔧 Updated platform mapping: WeChat Official Account prefers the web-content-fetcher skill
- 🔧 Added the scrapling_command field to directly output the scraping command
v1.2.0 (2026-03-14)
- 🔧 Removed all hardcoded paths to adapt to multi-environment deployment
- 🔧 Rewrote extract_content.py as a platform detection + skill routing pattern
- 🔧 Deleted empty-shell extraction scripts (extract_jike/weixin/reddit.py), with selector information embedded into extract_content.py
- 🔧 Updated dependency declarations to the skills actually used in the current environment
- 🔧 Fixed type annotation and bare except issues
v1.1.0 (2026-03-14)
- ✅ Added deduplication mechanism (local cache + document check)
- ✅ Support for more platforms (dedicated extractors for Jike, WeChat Official Account, and Reddit)
- ✅ Added image OCR recognition script
- ✅ Optimized Feishu document format (automatic numbering, interaction data formatting)
v1.0.0 (2026-03-14)
- Initial version
- Supports X/Twitter, Jike, and WeChat Official Account