# π¦ OpenClaw DeepReader > **The default web content gateway for OpenClaw agents.** Read X (Twitter), Reddit, YouTube, and any webpage β zero config, zero API keys. DeepReader is the built-in content reader for the [OpenClaw](https://github.com/anthropics/openclaw) agent framework. Paste any URL into a conversation, and DeepReader automatically fetches, parses, and saves high-quality Markdown to your agent's long-term memory. Built for social media and the modern web. π **Translations**: [δΈζ](README_zh.md) Β· [EspaΓ±ol](README_es.md) Β· [νκ΅μ΄](README_ko.md) Β· [ζ₯ζ¬θͺ](README_ja.md) Β· [Ψ§ΩΨΉΨ±Ψ¨ΩΨ©](README_ar.md) Β· [FranΓ§ais](README_fr.md) --- ## β‘ Install ```bash npx clawhub@latest install deepreader ``` Or install manually: ```bash git clone https://github.com/astonysh/OpenClaw-DeepReeder.git cd OpenClaw-DeepReeder python3 -m venv .venv && source .venv/bin/activate pip install -e . ``` --- ## π― Use When - You need to **read a tweet, thread, X article, or X profile** and add it to OpenClaw's memory - You need to **ingest a Reddit post** with top comments and discussion context - You want to **save a YouTube transcript** for later reference or analysis - You want to **clip any blog, article, or documentation page** into clean Markdown - Your agent needs a **default web reader** that just works β no API keys, no setup --- ## β¨ Supported Sources | Parser | Sources | Method | API Key? | |--------|---------|--------|----------| | π¦ **Twitter / X** | Tweets, threads, X Articles, Profiles | [FxTwitter API](https://github.com/FxEmbed/FxEmbed) + Nitter fallback | β None | | π **Reddit** | Posts + comment threads | Reddit `.json` API | β None | | π¬ **YouTube** | Video transcripts | [youtube-transcript-api](https://github.com/jdepoix/youtube-transcript-api) | β None | | π **Any URL** | Blogs, articles, docs | [Trafilatura](https://trafilatura.readthedocs.io/) + BeautifulSoup | β None | **Zero API keys. Zero login. Zero rate limits. Just paste and read.** --- ## π¦ Twitter / X β Deep Integration Powered by [FxTwitter](https://github.com/FxEmbed/FxEmbed) API with Nitter fallback. Inspired by [x-tweet-fetcher](https://github.com/ythx-101/x-tweet-fetcher). | Content Type | Support | |-------------|---------| | Regular tweets | β Full text + engagement stats | | Long tweets (Twitter Blue) | β Full text | | X Articles (long-form) | β Complete article text + word count | | Quoted tweets | β Nested content included | | Media (images, video, GIF) | β URLs extracted | | Reply threads | β Via Nitter fallback (first 5) | | Engagement stats | β β€οΈ likes, π RTs, ποΈ views, π bookmarks | | Profile metadata | β Basic profile snapshot (name, bio, stats) | ## π Reddit β Native JSON Integration Uses Reddit's built-in `.json` URL suffix β **no API keys, no OAuth, no registration**. | Content Type | Support | |-------------|---------| | Self posts (text) | β Full markdown body | | Link posts | β URL + metadata | | Top comments (sorted by score) | β Up to 15 comments | | Nested reply threads | β Up to 3 levels deep | | Media (images, galleries, video) | β URLs extracted | | Post stats | β β¬οΈ score, π¬ comment count, upvote ratio | | Flair tags | β Included | --- ## π Quick Start ```python from deepreader_skill import run # Read a tweet β saves to agent memory result = run("Check out this tweet: https://x.com/elonmusk/status/123456") # Read an X profile β saves profile snapshot result = run("https://x.com/thdxr") # Read a Reddit discussion β captures post + top comments result = run("Great thread: https://www.reddit.com/r/python/comments/abc123/my_post/") # Read a YouTube video β saves full transcript result = run("Watch this: https://youtube.com/watch?v=dQw4w9WgXcQ") # Read any article β extracts clean content result = run("Interesting read: https://example.com/blog/ai-agents-2026") # Batch process multiple URLs at once result = run(""" Here are some links to read: https://x.com/user/status/123456 https://www.reddit.com/r/MachineLearning/comments/xyz789/new_paper/ https://youtube.com/watch?v=dQw4w9WgXcQ https://example.com/article """) ``` --- ## π NotebookLM & Audio Integration DeepReader now seamlessly integrates with **Google NotebookLM**. Use explicit flags to opt in: - `--notebooklm` (or `/notebooklm`) β upload to NotebookLM - `--audio` / `--podcast` (or `/audio`) β upload + generate Audio Overview When these flags are present, DeepReader will: 1. Parse the requested URLs into Markdown. 2. Create a new Notebook in your Google NotebookLM account. 3. Upload the Markdown content as a source. 4. **(Optional)** Generate an Audio Overview and download it to the memory folder. **Supported NotebookLM Artifacts Generation:** Along with Audio Overviews, this integration can easily be extended to automatically generate and save: - **ποΈ Audio Overview** (Podcast) - **π₯ Video Overview** - **π§ Mind Map** - **π Reports** - **π Flashcards** - **β Quiz** - **π Infographic** - **π₯οΈ Slide Deck** - **π Data Table** > **β οΈ Note: Authentication Required** > Before using the NotebookLM integration, you must authenticate in your terminal (this only needs to be done once): > ```bash > notebooklm login > ``` --- ## π Output Format Every piece of content is saved as a `.md` file with structured YAML frontmatter: ```yaml --- title: "[r/python] How I built an AI agent framework" source_url: "https://www.reddit.com/r/python/comments/abc123/..." domain: "reddit.com" parser: "reddit" ingested_at: "2026-02-16T12:00:00Z" content_hash: "sha256:abc123..." word_count: 2500 --- # How I built an AI agent framework **r/python** Β· u/developer123 Β· 2026-02-16 12:00 UTC π β¬οΈ 847 (96% upvoted) Β· π¬ 234 comments Β· π·οΈ Discussion --- Post body goes here... --- ### π¬ Top Comments **u/expert_dev** (β¬οΈ 342): > This is a really well-structured approach... ``` --- ## ποΈ Architecture ``` deepreader_skill/ βββ __init__.py # Entry point β run() function βββ manifest.json # Skill metadata & trigger config βββ requirements.txt # Dependencies βββ core/ β βββ router.py # URL β Parser routing logic β βββ storage.py # Markdown file generation & saving β βββ utils.py # URL extraction & helper utilities βββ parsers/ βββ base.py # Abstract base parser & ParseResult model βββ generic.py # Generic article/blog parser (Trafilatura) βββ twitter.py # Twitter/X parser (FxTwitter + Nitter) βββ reddit.py # Reddit parser (.json API) βββ youtube.py # YouTube transcript parser ``` ### Router Strategy ``` URL detected β is Twitter/X? β FxTwitter API β Nitter fallback β is Reddit? β .json suffix API β is YouTube? β youtube-transcript-api β otherwise β Trafilatura (generic) ``` --- ## π§ Configuration DeepReader uses sensible defaults out of the box. Configuration can be customized via environment variables: | Variable | Default | Description | |----------|---------|-------------| | `DEEPREEDER_MEMORY_PATH` | `../../memory/inbox/` | Where to save ingested content (absolute path, or relative to repo root) | | `DEEPREEDER_LOG_LEVEL` | `INFO` | Logging verbosity (`DEBUG`, `INFO`, `WARNING`, `ERROR`) | | `FIRECRAWL_API_KEY` | `""` | Optional. If set, used as a fallback to scrape paywalled/blocked content via [Firecrawl](https://firecrawl.dev) | --- ## π‘ Why DeepReader? | Feature | DeepReader | Manual scraping | Browser tools | |---------|-----------|----------------|---------------| | **Trigger** | Automatic on URL | Manual code | Manual action | | **Twitter/X** | β Full support | β Blocked | β οΈ Partial | | **Reddit threads** | β + comments | β οΈ Complex | β οΈ Slow | | **YouTube transcripts** | β Built-in | β Separate tool | β Not available | | **API keys needed** | β None | β Often | β Sometimes | | **Output format** | Clean Markdown | Raw HTML | Screenshots | | **Memory integration** | β Auto-save | β Manual | β Manual | --- ## π Credits - **[FxTwitter / FixTweet](https://github.com/FxEmbed/FxEmbed)** β Public API for fetching Twitter/X content - **[x-tweet-fetcher](https://github.com/ythx-101/x-tweet-fetcher)** β Inspiration for the FxTwitter integration approach - **[Trafilatura](https://trafilatura.readthedocs.io/)** β Robust web content extraction - **[youtube-transcript-api](https://github.com/jdepoix/youtube-transcript-api)** β YouTube transcript fetching - **[notebooklm-py](https://github.com/teng-lin/notebooklm-py)** β Google NotebookLM integration for audio generation --- ## π€ Contributing Contributions are welcome! Feel free to: 1. Fork the repository 2. Create a feature branch (`git checkout -b feature/amazing-parser`) 3. Commit your changes (`git commit -m 'Add amazing parser'`) 4. Push to the branch (`git push origin feature/amazing-parser`) 5. Open a Pull Request --- ## π License This project is licensed under the **MIT License** β see the [LICENSE](LICENSE) file for details. ---
Built with π¦ by OpenClaw