Save web content with full original text, generate summaries and tags, retrieve semantically.
When user shares a link, evaluate interest signals:
Auto-save (no confirmation needed):
Offer to save (ask once):
Don't save:
All entries in ~/.openclaw/workspace-main/library/:
library/
├── articles/ # Web articles, blog posts, WeChat, Zhihu
├── tweets/ # Twitter/X posts and threads
├── videos/ # YouTube, Bilibili
├── podcasts/ # Podcast episodes
├── papers/ # Academic papers, PDFs
├── images/ # Infographics, visual content
└── misc/ # Everything else
| Type | URL Patterns | Fetch Method | Template |
|---|---|---|---|
| ------ | ------------- | -------------- | ---------- |
| article | Generic web, blog, /post/ | web_fetch or curl -s "https://r.jina.ai/URL" | article.md |
| mp.weixin.qq.com | cd ~/.agent-reach/tools/wechat-article-for-ai && python3 main.py "URL" | article.md | |
| tweet | x.com, twitter.com /status/ | xreach tweet URL --json | tweet.md |
| thread | x.com, twitter.com (thread) | xreach thread URL --json | tweet.md |
| video | youtube.com, youtu.be | yt-dlp --dump-json "URL" + subtitle extraction | video.md |
| bilibili | bilibili.com | yt-dlp --dump-json "URL" + subtitle extraction | video.md |
| paper | arxiv.org, .pdf links | web_fetch or browser | paper.md |
| podcast | Podcast platforms | web_fetch metadata | podcast.md |
| image | Image URLs | Download + describe | image.md |
# Single tweet
xreach tweet URL_OR_ID --json
# Full thread
xreach thread URL_OR_ID --json
# User timeline (for context)
xreach tweets @username -n 20 --json
Extract from JSON: full_text, user.screen_name, created_at, entities, media URLs.
For threads: concatenate all tweets in order as full content.
# Download subtitles
yt-dlp --write-sub --write-auto-sub --sub-lang "zh-Hans,zh,en" \
--convert-subs vtt --skip-download -o "/tmp/%(id)s" "URL"
# Then read the .vtt file as transcript
Every entry has two parts:
title: "..."
source: "..." # Platform/domain
url: "..." # Original URL
author: "..." # Author or @handle
date_published: "..." # When content was created
date_saved: "..." # When we saved it
last_updated: "..." # Last modification
type: article|tweet|video|podcast|paper|image
tags: [tag1, tag2, ...]
status: unread|read|reviewed
priority: low|normal|high
related: [] # Paths to related entries
# {title}
## Summary
2-3 sentence summary.
## Key Points
- Point 1
- Point 2
## Original Content
THE FULL ORIGINAL TEXT — not truncated, not summarized.
This is the authoritative source for re-reading and quoting.
## Quotes
> Notable quotes worth highlighting
## Notes
Personal observations, connections, action items.
## Related
- [[library/tweets/related-tweet]]
- [[library/articles/related-article]]
⚠️ MANDATORY: Always save original full text in "Original Content" section.
Summaries and key points are for quick retrieval. The original text is for accurate re-reading and quoting. Never skip saving the full content.
Examples:
library/articles/yc-why-not-work-and-startup-2026-03-12.mdlibrary/tweets/garry-tan-on-yc-advice-2026-03-13.mdlibrary/videos/how-to-build-agents-2026-03-13.mdmemory_search("URL or title") to avoid duplicates# Semantic search
memory_search("创业方法论")
memory_search("Garry Tan 的推文")
memory_search("AI agent 视频教程")
# Read specific entry
memory_get("library/tweets/garry-tan-on-yc-2026-03-13.md")
When returning search results, show:
When user asks to write something using saved content:
[[library/type/entry-name]]Located in templates/:
article.md — Web articles, blog posts, newsletterstweet.md — Twitter/X posts and threadsvideo.md — Videos with transcriptpodcast.md — Podcast episodespaper.md — Academic papersimage.md — Visual content共 1 个版本