Clawfeed
ClawFeed — AI-powered news digest with structured summaries from Twitter/RSS feeds and web dashboard
Install / Use
/learn @kevinho/ClawfeedREADME
ClawFeed
Stop scrolling. Start knowing.
Live Demo: https://clawfeed.kevinhe.io
AI-powered news digest that curates thousands of sources down to the highlights that matter. Generates structured summaries (4H/daily/weekly/monthly) from Twitter, RSS, and more. Works standalone or as an OpenClaw / Zylos skill.

Features
- 📰 Multi-frequency digests — 4-hourly, daily, weekly, monthly summaries
- 📡 Sources system — Add Twitter feeds, RSS, HackerNews, Reddit, GitHub Trending, and more
- 📦 Source Packs — Share curated source bundles with the community
- 📌 Mark & Deep Dive — Bookmark content for AI-powered deep analysis
- 🎯 Smart curation — Configurable rules for content filtering and noise reduction
- 👀 Follow/Unfollow suggestions — Based on feed quality analysis
- 📢 Feed output — Subscribe to any user's digest via RSS or JSON Feed
- 🌐 Multi-language — English and Chinese UI
- 🌙 Dark/Light mode — Theme toggle with localStorage persistence
- 🖥️ Web dashboard — SPA for browsing and managing digests
- 💾 SQLite storage — Fast, portable, zero-config database
- 🔐 Google OAuth — Multi-user support with personal bookmarks and sources
Installation
Option 1: ClawHub (recommended)
clawhub install clawfeed
Option 2: OpenClaw Skill
cd ~/.openclaw/skills/
git clone https://github.com/kevinho/clawfeed.git
OpenClaw auto-detects SKILL.md and loads the skill. The agent can then generate digests via cron, serve the dashboard, and handle bookmark commands.
Option 3: Zylos Skill
cd ~/.zylos/skills/
git clone https://github.com/kevinho/clawfeed.git
Option 4: Standalone
git clone https://github.com/kevinho/clawfeed.git
cd clawfeed
npm install
Option 5: Docker
# Basic usage
docker run -d -p 8767:8767 kevinho/clawfeed
# With persistent data
docker run -d -p 8767:8767 -v clawfeed-data:/app/data kevinho/clawfeed
# With environment variables (recommended for production)
docker run -d -p 8767:8767 \
-v clawfeed-data:/app/data \
-e ALLOWED_ORIGINS=https://yourdomain.com \
-e API_KEY=your-api-key \
-e GOOGLE_CLIENT_ID=your-client-id \
-e GOOGLE_CLIENT_SECRET=your-client-secret \
-e SESSION_SECRET=your-session-secret \
kevinho/clawfeed
Quick Start
# 1. Copy and edit environment config
cp .env.example .env
# Edit .env with your settings
# 2. Start the API server
npm start
# → API running on http://127.0.0.1:8767
Environment Variables
Create a .env file in the project root:
| Variable | Description | Required | Default |
|----------|-------------|----------|---------|
| GOOGLE_CLIENT_ID | Google OAuth client ID | No* | - |
| GOOGLE_CLIENT_SECRET | Google OAuth client secret | No* | - |
| SESSION_SECRET | Session encryption key | No* | - |
| API_KEY | API key for digest creation | No | - |
| DIGEST_PORT | Server port | No | 8767 |
| ALLOWED_ORIGINS | Allowed origins for CORS | No | localhost |
*Required for authentication features. Without OAuth, the app runs in read-only mode.
Authentication Setup
To enable Google OAuth login:
- Go to Google Cloud Console
- Create a new project or select existing one
- Enable the Google+ API
- Create OAuth 2.0 credentials
- Add your domain to authorized origins
- Add callback URL:
https://yourdomain.com/api/auth/callback - Set credentials in
.env
API
All endpoints prefixed with /api/.
Digests
| Method | Endpoint | Description | Auth |
|--------|----------|-------------|------|
| GET | /api/digests | List digests ?type=4h&limit=20&offset=0 | - |
| GET | /api/digests/:id | Get single digest | - |
| POST | /api/digests | Create digest | API Key |
Auth
| Method | Endpoint | Description | Auth |
|--------|----------|-------------|------|
| GET | /api/auth/config | Auth availability check | - |
| GET | /api/auth/google | Start OAuth flow | - |
| GET | /api/auth/callback | OAuth callback | - |
| GET | /api/auth/me | Current user info | Yes |
| POST | /api/auth/logout | Logout | Yes |
Marks (Bookmarks)
| Method | Endpoint | Description | Auth |
|--------|----------|-------------|------|
| GET | /api/marks | List bookmarks | Yes |
| POST | /api/marks | Add bookmark { url, title?, note? } | Yes |
| DELETE | /api/marks/:id | Remove bookmark | Yes |
Sources
| Method | Endpoint | Description | Auth |
|--------|----------|-------------|------|
| GET | /api/sources | List user's sources | Yes |
| POST | /api/sources | Create source { name, type, config } | Yes |
| PUT | /api/sources/:id | Update source | Yes |
| DELETE | /api/sources/:id | Soft-delete source | Yes |
| GET | /api/sources/detect | Auto-detect source type from URL | Yes |
Source Packs
| Method | Endpoint | Description | Auth |
|--------|----------|-------------|------|
| GET | /api/packs | Browse public packs | - |
| POST | /api/packs | Create pack from your sources | Yes |
| POST | /api/packs/:id/install | Install pack (subscribe to its sources) | Yes |
Feeds
| Method | Endpoint | Description | Auth |
|--------|----------|-------------|------|
| GET | /feed/:slug | User's digest feed (HTML) | - |
| GET | /feed/:slug.json | JSON Feed format | - |
| GET | /feed/:slug.rss | RSS format | - |
Config
| Method | Endpoint | Description | Auth |
|--------|----------|-------------|------|
| GET | /api/changelog | Changelog ?lang=zh\|en | - |
| GET | /api/roadmap | Roadmap ?lang=zh\|en | - |
Reverse Proxy
Example Caddy configuration:
handle /digest/api/* {
uri strip_prefix /digest/api
reverse_proxy localhost:8767
}
handle_path /digest/* {
root * /path/to/clawfeed/web
file_server
}
Customization
- Curation rules: Edit
templates/curation-rules.mdto control content filtering - Digest format: Edit
templates/digest-prompt.mdto customize AI output format
Source Types
| Type | Example | Description |
|------|---------|-------------|
| twitter_feed | @karpathy | Twitter/X user feed |
| twitter_list | List URL | Twitter list |
| rss | Any RSS/Atom URL | RSS feed |
| hackernews | HN Front Page | Hacker News |
| reddit | /r/MachineLearning | Subreddit |
| github_trending | language=python | GitHub trending repos |
| website | Any URL | Website scraping |
| digest_feed | ClawFeed user slug | Another user's digest |
| custom_api | JSON endpoint | Custom API |
Development
npm run dev # Start with --watch for auto-reload
Testing
cd test
./setup.sh # Create test users
./e2e.sh # Run 66 E2E tests
./teardown.sh # Clean up
Architecture
See docs/ARCHITECTURE.md for multi-tenant design and scale analysis.
Roadmap
See ROADMAP.md or the in-app roadmap page.
Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
MIT License — see LICENSE for details.
Copyright 2026 Kevin He
Related Skills
node-connect
340.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
340.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.1kCommit, push, and open a PR
