# 🦞 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