Set up and manage an AI-curated daily tech brief from 23 sources. Use when user says "set up multi-source-feed", "configure my daily brief", or "msf setup".
Install
npx skillscat add jadeenn/multi-source-feed Install via the SkillsCat registry.
Multi-Source Feed
AI-curated daily tech brief aggregated from 23 sources (X, HN, GitHub Trending, RSS blogs, Reddit, Product Hunt, Tavily, and more). Deduplicates, filters by your interests, and delivers a structured memo.
Setup
When the user asks to set up Multi-Source Feed, follow these steps in order. Execute each step automatically. If any step fails, print the manual command and continue.
Step 1: Clone & Install
cd ~ && git clone https://github.com/Jadeenn/multi-source-feed.git
cd ~/multi-source-feed
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
playwright install chromiumIf clone already exists, skip to pip install.
Step 2: API Keys
Ask the user for two API keys:
- Tavily (free): sign up at https://tavily.com and copy the API key
- Product Hunt (free): get a developer token at https://api.producthunt.com/v2/docs
Once the user provides both keys, write them to ~/multi-source-feed/.env:
TAVILY_API_KEY=<user's key>
PRODUCTHUNT_API_TOKEN=<user's key>Step 3: X/Twitter Login
Tell the user:
"I'll open a browser window for you to log in to X/Twitter. After logging in, close the browser — your session will be saved automatically."
Then run:
cd ~/multi-source-feed && source .venv/bin/activate && python login_save_session.pyThis creates x_session.json in the project root.
Step 4: Personalize (Optional)
Ask the user:
"The default profile is set up for AI/tech product enthusiasts. Would you like to customize your interests, or use the defaults?"
If they want to customize:
- Read
config/user_profile.md, modify based on their described interests - Optionally adjust
config/sources.yaml(enable/disable sources) - Optionally adjust
config/preferences.md(change memo sections/style)
If they say "skip" or "defaults are fine", move on.
Step 5: Test Run
cd ~/multi-source-feed && source .venv/bin/activate && python -m src.pipelineShow the user the output summary (number of sources, items fetched, any errors). If successful, show 5-10 sample titles from feed_slim.json.
Step 6: Schedule
Scraping (crontab):
(crontab -l 2>/dev/null; echo "0 9 * * * cd ~/multi-source-feed && .venv/bin/python3 -m src.pipeline >> /tmp/msf-scrape.log 2>&1") | crontab -Memo generation (OpenClaw cron):
Create an OpenClaw cron job that runs daily (e.g., 20 minutes after scrape). The job should:
- Check if
feed_slim.jsonexists and is from today - Read
config/user_profile.mdandconfig/preferences.md - Read
feed_slim.json - Generate the daily brief following preferences.md format
- Send the memo to the user via their configured channel
- Save the memo to
memo/YYYY-MM-DD.md
Tell the user:
"Setup complete! Your daily brief will be generated every morning. You'll receive it through your configured messaging channel."
Manual Setup Fallback
If automated setup fails, provide the user with these commands to run manually:
# 1. Clone
git clone https://github.com/Jadeenn/multi-source-feed.git && cd multi-source-feed
# 2. Install
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt && playwright install chromium
# 3. Configure
cp .env.example .env
# Edit .env with your API keys
# 4. X Login
python login_save_session.py
# 5. Test
python -m src.pipeline
# 6. Schedule scraping
crontab -e
# Add: 0 9 * * * cd ~/multi-source-feed && .venv/bin/python3 -m src.pipeline >> /tmp/msf-scrape.log 2>&1Customization
All user-customizable files are in config/:
| File | Purpose |
|---|---|
config/user_profile.md |
Your interests, Key Players to track |
config/sources.yaml |
Enable/disable sources, add RSS feeds |
config/preferences.md |
Memo format, sections, filtering rules |
Adding a new RSS source
Add 4 lines to config/sources.yaml:
- name: my-blog
type: rss
enabled: true
url: https://example.com/feed.xml
tags: [blog]X-Push (Optional)
X-Push sends real-time X/Twitter highlights every 2 hours. To enable:
- Set up an OpenClaw cron job running
push/run.shevery 2 hours - Customize
push/user_profile.mdwith your interests - The push module shares
x_session.jsonand.venvwith the main pipeline
Architecture
23 sources → Python pipeline → dedup (URL + title similarity + cross-day memo) → feed_merged.json → LLM generates structured memo → delivered to user.
See docs/architecture.md for the full system diagram.