Automated weekly digest of AI/ML research papers from arXiv, powered by Claude AI.
Never miss important papers again! This bot fetches papers daily, ranks them by your interests, and sends you a beautifully formatted weekly email digest with AI-generated summaries.
- π Daily Ingestion: Fetches papers throughout the week (no missed papers)
- π― Smart Ranking: Prioritizes papers matching your keywords
- π€ AI Summaries: Claude generates concise 2-3 sentence summaries
- π§ Beautiful Emails: HTML digest with paper metadata and direct links
- π₯ Multiple Recipients: Share digest with friends and colleagues
- π¨ Error Alerts: Get notified when something goes wrong
- π³ Dockerized: Runs anywhere, optimized for Raspberry Pi
- β° Cron-Based: Lightweight, runs only when needed
- Docker and Docker Compose
- Anthropic API key (get one here)
- SMTP email account (Gmail, Outlook, etc.)
- Linux/macOS system or Raspberry Pi
git clone https://github.com/sidgod/arxiv-digest-bot.git
cd arxiv-digest-bot# Copy example environment file
cp .env.example .env
# Edit with your settings
nano .envRequired settings:
ANTHROPIC_API_KEY: Your Claude API keySMTP_*: Your email server settingsEMAIL_TO: Your email address (or multiple, comma-separated)
Optional settings:
INTEREST_KEYWORDS: Keywords for ranking (e.g.,RLHF,fine-tuning,RAG)ARXIV_CATEGORIES: Categories to search (default:cs.AI,cs.CL,cs.LG)
docker compose build# Test ingest mode (fetch papers)
docker compose run --rm arxiv-digest --mode=ingest
# Test digest mode (send email)
docker compose run --rm arxiv-digest --mode=digest# Edit crontab
crontab -e
# Add these lines:
# Daily ingest at midnight
0 0 * * * cd /home/pi/arxiv-digest-bot && /usr/bin/docker compose run --rm arxiv-digest --mode=ingest >> ingest.log 2>&1
# Weekly digest every Monday at 9 AM
0 9 * * 1 cd /home/pi/arxiv-digest-bot && /usr/bin/docker compose run --rm arxiv-digest --mode=digest >> digest.log 2>&1Important: Use full paths in crontab!
Ingest Mode (runs daily):
- Fetches 15 new papers from arXiv
- Stores in SQLite database (pending queue)
- Exits (~10 seconds, no API costs)
Digest Mode (runs weekly):
- Loads all pending papers from the week (~70-100 papers)
- Ranks by keyword match (if configured) or chronologically
- Selects top 15 papers
- Generates summaries using Claude AI
- Sends HTML email digest
- Clears pending queue
If we only fetch once per week, we'd miss papers uploaded earlier in the week (they get buried under newer submissions). Daily ingestion ensures comprehensive coverage while still delivering a manageable weekly digest.
Common categories you might want:
| Category | Description |
|---|---|
cs.AI |
Artificial Intelligence |
cs.CL |
Computation and Language (NLP) |
cs.LG |
Machine Learning |
cs.CV |
Computer Vision |
cs.NE |
Neural and Evolutionary Computing |
cs.RO |
Robotics |
Papers matching these keywords get ranked higher:
INTEREST_KEYWORDS=RLHF,fine-tuning,RAG,attention mechanism,prompt engineering,agentsMatching logic:
- Title matches: 3 points
- Abstract matches: 1 point each (max 3)
- Case-insensitive, partial matching
# Single recipient
EMAIL_TO=you@example.com
# Multiple recipients (share with friends!)
EMAIL_TO=you@example.com,friend1@example.com,friend2@example.com- Enable 2-Factor Authentication
- Generate App Password: https://myaccount.google.com/apppasswords
- Use App Password in
.env:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-16-char-app-password
EMAIL_FROM=your-email@gmail.comSubject: [arXiv Digest] Top 15 of 87 Papers - Week of Feb 7
π Weekly Summary
β’ Showing top 15 of 87 papers collected this week
β’ π― 8 papers match your interest keywords
β’ Collection period: Jan 31 - Feb 7, 2026
βββββββββββββββββββββββββββββββββββββββββββββββ
β Efficient Fine-Tuning of LLMs via Sparse β
β Adapters β
β arXiv:2402.15432 β’ Feb 7, 2026 β
β π·οΈ cs.AI cs.LG β
β π― Matches: fine-tuning, attention β
β β
β This paper introduces a novel sparse β
β adapter architecture that reduces β
β fine-tuning memory requirements by 80%... β
βββββββββββββββββββββββββββββββββββββββββββββββ
[... 14 more paper cards ...]
# View ingest logs
tail -f ingest.log
# View digest logs
tail -f digest.log
# View application logs
tail -f data/logs/app.logThis is normal if arXiv hasn't published new papers in your categories. Not an error.
- Verify
SMTP_USERNAMEandSMTP_PASSWORD - For Gmail, use App Password (not regular password)
- Check 2FA is enabled
- Check internet connection
- arXiv may be temporarily down (retry later)
- Rate limiting (script includes automatic retries)
- Verify
ANTHROPIC_API_KEY - Check API quota/billing
- Claude may be temporarily unavailable
- Check
.envfile exists and is readable - Verify all required fields are set
- Check email format is valid
# Test configuration
docker compose run --rm arxiv-digest --mode=ingest
# Test with fewer papers (faster)
ARXIV_DAILY_FETCH_LIMIT=5 docker compose run --rm arxiv-digest --mode=ingest
# Inspect database
sqlite3 data/digest.db "SELECT COUNT(*) FROM pending_papers;"
sqlite3 data/digest.db "SELECT arxiv_id, title FROM pending_papers LIMIT 5;"| Code | Meaning | Action |
|---|---|---|
| 0 | Success | None |
| 1 | Configuration error | Check .env file |
| 2 | arXiv API error | Check network, retry later |
| 3 | Claude API error | Check API key and quota |
| 4 | Email sending error | Check SMTP settings |
| 5 | No new papers | Normal, not an error |
arxiv-digest-bot/
βββ src/
β βββ main.py # Entry point & orchestration
β βββ config.py # Configuration management
β βββ arxiv_scraper.py # arXiv API client
β βββ ranker.py # Keyword-based ranking
β βββ summarizer.py # Claude AI integration
β βββ notifier.py # Email notifications
β βββ storage.py # SQLite database
βββ data/ # Database & logs (created automatically)
βββ Dockerfile # Container definition
βββ docker-compose.yml # Docker Compose config
βββ requirements.txt # Python dependencies
βββ .env.example # Example configuration
βββ README.md # This file
- Never commit
.envfile (contains secrets) - Database stored locally in
./data - Container runs as non-root user
- Secrets passed via environment variables only
Claude API: ~$0.05-0.10 per digest (15 summaries)
- Sonnet 4.5: ~$0.003 per summary
- Haiku 4.5: ~$0.0003 per summary (cheaper but lower quality)
Weekly cost: ~$0.05-0.40 depending on model and paper count
- Web UI for configuration
- Per-recipient keyword preferences
- Slack/Discord/Telegram notifications
- RSS feed generation
- Relevance scoring with embeddings
- Paper recommendation engine
- Historical digest archive
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
You are free to:
- β Use commercially
- β Modify and distribute
- β Use privately
- β Sublicense
The only requirement is to include the original copyright notice and license in any copy of the software.
- arXiv for providing open access to research papers
- Anthropic for Claude AI
- Built with β€οΈ for the AI/ML research community
Having issues? Open a GitHub issue or check the troubleshooting section above.
Happy researching! ππ