This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
What I Built
A sloth doesn't chase its food. It waits, and the food comes to it.
I wanted my news to work the same way. So I built Sift AI: an open-source AI crew that wakes up before I do, reads its way through the day's news while I sleep, and leaves exactly one PDF in my inbox. I choose when it runs, and it takes care of the rest. I never open a tab, search, or press a button.
The idea is a funnel. The system does the exhausting part (reading far more than any human would) so I only do the good part (reading one great article).
Every morning, on its own:
- It casts a wide net. It runs topic-by-topic searches (global and India-scoped, via NewsData) and also pulls editorial and op-ed RSS feeds, because news APIs mostly skip opinion.
- It reads everything. Each result is actually opened and scraped, not judged by its headline. Paywall text, comment boilerplate and junk are stripped out, leaving a cleaned pool of 20 to 30 full-text candidates.
- It judges. An AI Senior News Editor weighs the whole pool against each other and picks exactly one, or honestly says none are good enough today.
- It teaches. You get 3 to 5 key takeaways and a word of the day with a meaning, an example and a practice scenario.
- It delivers. Everything arrives as a clean, print-ready PDF.
Read 20 to 30. Keep 1. That's the whole job, and I don't do any of it.
This morning's brief was "Canary in the coal mine: On the performance of India's core industrial sectors" from The Hindu's editorial page, with the word "blip". I didn't pick it. I just woke up and it was there.
Four promises it never breaks:
- It never rewrites the article. The text passes through a deterministic scraper, so you read the author's real words. AI only judges, summarizes and teaches.
- It never forces a bad pick. On a weak news day, the editor is allowed to reject everything.
- It never fails silently. It retries with looser bars, and if that fails it falls back to the best known-reliable candidate with no LLM call at all.
- It never needs me. No server stays on, no LLM API bill, no button.
Your routine, your rules. Sift AI isn't locked to my schedule, topics, or preferences. You can customize when it runs, the topics you care about, the sources it searches, and the kind of reading experience you want. Set it up once, let it run before you wake up, and find your brief waiting in your inbox. The default theme keeps the lazy sloth spirit alive: slow, steady, and smart enough to do the work while you rest. 🦥
Who gets to be lazier? Students, people building their vocabulary, and anyone who wants to stay informed without doomscrolling: one great read instead of an endless feed.
Demo
A real, unattended run, start to finish:
1. Your chosen time: the trigger. A scheduler fires a repository_dispatch at the time you configure, and GitHub Actions starts by itself. No manual click.
2. The run. The workflow pushes the notebook to Kaggle, which starts a free T4 x2 GPU session. Ollama serves Gemma 4 and the crew runs end to end. [[Update: new Kaggle screenshot and run time with Gemma 4]]
3. The output. A print-ready PDF with the full article, key takeaways and a word of the day.
4. The delivery. In my inbox after the trigger.
Your schedule. Your topics. Your brief. The system runs at the time you choose and delivers your reading brief before you need to think about it. Me: asleep. 🦥
Code
bytebymanas
/
Sift-AI
Automated daily AI research engine powered by CrewAI & serverless Nvidia T4 GPUs.
â—ˆ The Idea
Most news is noise. Sift AI searches news sources and editorial feeds, reads and cleans 20 to 30 full-text candidates, and hands you exactly one article worth your time, complete with key takeaways and a word of the day to grow your vocabulary.
Every day at the time you choose, a scheduler triggers a GitHub Actions workflow, which launches a Kaggle notebook. Inside it, a small crew of AI agents running open-source Gemma models collects fresh stories, picks the strongest one, summarizes it, chooses a useful English word, and emails everything to you as a clean PDF.
No server stays on. No LLM API is billed. Nobody has to press a button.
Daily |
1 Article |
4 Agents |
$0 |
How I Built It
| Layer | What I used |
|---|---|
| Models | Gemma 4 26B (A4B) as the editor, Gemma 4 E4B for the summarizer and vocab agents. Both are open-weight |
| Inference | Ollama on Kaggle's free GPU, fully local to the kernel |
| Agents | CrewAI, 4 agents across 2 models |
| Discovery | NewsData API (per-topic queries) and editorial RSS via feedparser
|
| Scraping |
requests, BeautifulSoup, plus a garbage-phrase filter for paywall and comment text |
| Output | HTML template, WeasyPrint (PDF), Gmail SMTP |
| Wake-up | cron-job.org, then GitHub repository_dispatch, then GitHub Actions, then Kaggle CLI |
| Dev workflow | GitHub Copilot: coding agent, code review and CLI (details below) |
A funnel, not a feed. Wide net first, then ruthless narrowing: many queries and feeds, about 20 to 30 cleaned full-text candidates, one winner.
Right model for each job. The bigger Gemma does the one task that needs real judgment: comparing the whole pool and deciding what is worth reading. It's a mixture-of-experts model with only about 4B parameters active per token, so it's fast enough for a free GPU. The small E4B model handles the simple jobs on a single clean input. The vocabulary coach never even sees the article.
A picky editor. Candidates are ranked by factual substance, source credibility, learning value and real-world importance. Recency only breaks ties. Listicles, clickbait, press releases and vague "experts say" sourcing are filtered out. My topics are a preference, not a filter, so a great article outside them still beats a mediocre one inside them.
Laziness took three rewrites. My first version drove Google Colab with Playwright. It broke whenever the DOM changed, which is the opposite of lazy. I moved to Kaggle's official CLI for deterministic execution. Then I found GitHub's built-in schedule can run hours late, so I switched to an external scheduler that fires within seconds. A lazy system has to be reliable, because the whole point is that I never check on it.
Automated with GitHub Actions. The pipeline is automated end to end with GitHub Actions: a scheduler triggers it, and it pushes the notebook to Kaggle and runs it, with no server and no manual step.
Why Does Open Innovation Matter?
A lazy system has to be cheap to leave running forever. That's only possible because the models are open.
-
I swapped the whole brain in two lines. Sift AI started on Qwen 2.5 7B and Qwen 3 1.7B. When Gemma 4 landed in Ollama, I changed two
ollama pulllines and two model names in one config cell. No agents, tasks or prompts changed. That's the open-weight promise in practice: when a better model ships, you take it the same day, with no migration and no waiting for a provider to offer it. - It costs $0 in LLM inference, forever. Judging a pool of 20 to 30 full articles every day would be a real monthly bill on a paid API, for something I never look at. With Gemma on Ollama and a free GPU, it's nothing. I can forget it exists, and it keeps working.
- I chose the model for each job. Open weights let me put a big mixture-of-experts model on the judgment task and a tiny one on the easy tasks, sized for a free T4. A single closed endpoint doesn't offer that.
- My reading stays mine. My topics and reading history go to a model running inside my own kernel, not a third-party LLM provider.
- I own the editor's judgment. What counts as "worth reading," what gets filtered, and when to reject everything are rules in a prompt I can rewrite. With a closed model, that's a black box.
A closed API would have made this a "pay per morning" product. Open models made it a fire-and-forget habit.
My Agent Session
The planning session where I designed the funnel and split the work across 4 agents:
The Lazy Payoff
Before: 60+ minutes a day of searching and tab-hopping, and I rarely retained anything.
Now: one PDF, a few minutes of reading, one new word.
From this week:
- Your chosen time: the scheduler fires automatically, day after day
- 20 to 30 articles read and cleaned by the crew every run, so I read 1
- 0 clicks on the days it ran on its own
Maintenance: renewing one token now and then. 🦥
Prize Categories
Gemma: the core of the project. Gemma 4 26B (A4B) is the editor agent and Gemma 4 E4B runs the summarizer and vocab agents, served locally with Ollama on Kaggle's free GPU.
Best Use of GitHub Copilot: the whole project is automated with GitHub Actions (scheduler trigger →
repository_dispatch→ Actions → Kaggle CLI → run notebook), with no server and no manual step.
Built by Manas. Sift through the noise. Keep the signal.



Top comments (0)