<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Manas Chhabra</title>
    <description>The latest articles on DEV Community by Manas Chhabra (@bytebymanas).</description>
    <link>https://dev.to/bytebymanas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4190993%2F4dab747d-3991-44d0-8350-fcabd89c4dbc.jpg</url>
      <title>DEV Community: Manas Chhabra</title>
      <link>https://dev.to/bytebymanas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bytebymanas"/>
    <language>en</language>
    <item>
      <title>Open-Weight AI Finds My Best Daily Read While I Sleep</title>
      <dc:creator>Manas Chhabra</dc:creator>
      <pubDate>Sat, 24 Oct 2026 17:06:08 +0000</pubDate>
      <link>https://dev.to/bytebymanas/open-weight-ai-finds-my-best-daily-read-while-i-sleep-4a2c</link>
      <guid>https://dev.to/bytebymanas/open-weight-ai-finds-my-best-daily-read-while-i-sleep-4a2c</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;A sloth doesn't chase its food. It waits, and the food comes to it.&lt;/p&gt;

&lt;p&gt;I wanted my news to work the same way. So I built &lt;strong&gt;Sift AI&lt;/strong&gt;: an open-source AI crew that wakes up &lt;strong&gt;before I do&lt;/strong&gt;, reads its way through the day's news &lt;em&gt;while I sleep&lt;/em&gt;, and leaves &lt;strong&gt;exactly one PDF in my inbox&lt;/strong&gt;. I choose when it runs, and it takes care of the rest. I never open a tab, search, or press a button.&lt;/p&gt;

&lt;p&gt;The idea is a &lt;strong&gt;funnel&lt;/strong&gt;. The system does the exhausting part (reading far more than any human would) so I only do the good part (reading one great article).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every morning, on its own:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It casts a wide net.&lt;/strong&gt; 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It reads everything.&lt;/strong&gt; 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 &lt;strong&gt;20 to 30 full-text candidates&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It judges.&lt;/strong&gt; An AI Senior News Editor weighs the whole pool against each other and picks &lt;strong&gt;exactly one&lt;/strong&gt;, or honestly says &lt;em&gt;none are good enough today&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It teaches.&lt;/strong&gt; You get 3 to 5 key takeaways and a &lt;strong&gt;word of the day&lt;/strong&gt; with a meaning, an example and a practice scenario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It delivers.&lt;/strong&gt; Everything arrives as a clean, print-ready PDF.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Read 20 to 30. Keep 1.&lt;/strong&gt; That's the whole job, and I don't do any of it.&lt;/p&gt;

&lt;p&gt;This morning's brief was &lt;em&gt;"Canary in the coal mine: On the performance of India's core industrial sectors"&lt;/em&gt; from The Hindu's editorial page, with the word &lt;strong&gt;"blip"&lt;/strong&gt;. I didn't pick it. I just woke up and it was there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Four promises it never breaks:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It never rewrites the article.&lt;/strong&gt; The text passes through a deterministic scraper, so you read the author's real words. AI only judges, summarizes and teaches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It never forces a bad pick.&lt;/strong&gt; On a weak news day, the editor is allowed to reject everything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It never fails silently.&lt;/strong&gt; It retries with looser bars, and if that fails it falls back to the best known-reliable candidate with no LLM call at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It never needs me.&lt;/strong&gt; No server stays on, no LLM API bill, no button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Your routine, your rules.&lt;/strong&gt; 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 &lt;strong&gt;lazy sloth&lt;/strong&gt; spirit alive: slow, steady, and smart enough to do the work while you rest. 🦥&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who gets to be lazier?&lt;/strong&gt; Students, people building their vocabulary, and anyone who wants to stay informed without doomscrolling: one great read instead of an endless feed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;A real, unattended run, start to finish:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Your chosen time: the trigger.&lt;/strong&gt; A scheduler fires a &lt;code&gt;repository_dispatch&lt;/code&gt; at the time you configure, and GitHub Actions starts by itself. No manual click.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fej4h61cpba4t1uvr4xd4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fej4h61cpba4t1uvr4xd4.png" alt="GitHub Actions runs triggered by repository dispatch" width="798" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The run.&lt;/strong&gt; 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]]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcmvgg7jikaqaowfkkino.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcmvgg7jikaqaowfkkino.png" alt="Kaggle run log on GPU T4 x2" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The output.&lt;/strong&gt; A print-ready PDF with the full article, key takeaways and a word of the day.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://drive.google.com/file/d/1vaPBeE-J2r2WgmPcmvjvbrMIiu5uB-i5/view?usp=sharing" rel="noopener noreferrer" class="c-link"&gt;
            daily_brief_2026-10-23.pdf - Google Drive
          &lt;/a&gt;
        &lt;/h2&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fssl.gstatic.com%2Fdocs%2Fdoclist%2Fimages%2Fdrive_favicon_2026_32dp.png" width="32" height="32"&gt;
          drive.google.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;4. The delivery.&lt;/strong&gt; In my inbox after the trigger.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqksstvp6mazlnot9pv90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqksstvp6mazlnot9pv90.png" alt="Email from Sift AI with the daily brief attached" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your schedule. Your topics. Your brief.&lt;/strong&gt; The system runs at the time you choose and delivers your reading brief before you need to think about it. Me: asleep. 🦥&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/bytebymanas" rel="noopener noreferrer"&gt;
        bytebymanas
      &lt;/a&gt; / &lt;a href="https://github.com/bytebymanas/Sift-AI" rel="noopener noreferrer"&gt;
        Sift-AI
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Automated daily AI research engine powered by CrewAI &amp;amp; serverless Nvidia T4 GPUs.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ab39765320a365f3a19f29ea68ef28b8aeca7d080969638bc5e6991ac8650991/68747470733a2f2f63617073756c652d72656e6465722e76657263656c2e6170702f6170693f747970653d776176696e67266865696768743d32343026636f6c6f723d303a3066306332392c35303a3330326236332c3130303a32304245464626746578743d53494654253230414926666f6e74436f6c6f723d66666666666626666f6e7453697a653d373826666f6e74416c69676e593d333826646573633d5468652532306265737425323061727469636c652532306f662532307468652532306461792532432532307069636b6564253230627925323041492532302543322542372532305a65726f253230736572766572732532302543322542372532305a65726f25323041504925323062696c6c732664657363416c69676e593d3630266465736353697a653d313726616e696d6174696f6e3d66616465496e"&gt;&lt;img src="https://camo.githubusercontent.com/ab39765320a365f3a19f29ea68ef28b8aeca7d080969638bc5e6991ac8650991/68747470733a2f2f63617073756c652d72656e6465722e76657263656c2e6170702f6170693f747970653d776176696e67266865696768743d32343026636f6c6f723d303a3066306332392c35303a3330326236332c3130303a32304245464626746578743d53494654253230414926666f6e74436f6c6f723d66666666666626666f6e7453697a653d373826666f6e74416c69676e593d333826646573633d5468652532306265737425323061727469636c652532306f662532307468652532306461792532432532307069636b6564253230627925323041492532302543322542372532305a65726f253230736572766572732532302543322542372532305a65726f25323041504925323062696c6c732664657363416c69676e593d3630266465736353697a653d313726616e696d6174696f6e3d66616465496e" alt="Sift AI" width="100%"&gt;&lt;/a&gt;
&lt;a href="https://github.com/bytebymanas/sift-ai" rel="noopener noreferrer"&gt;
  &lt;img src="https://camo.githubusercontent.com/3c9064de36a6a6e986c71b9c24dcb0bd1a12de71a936c91304635c41fd90d6f7/68747470733a2f2f726561646d652d747970696e672d7376672e64656d6f6c61622e636f6d3f666f6e743d466972612b436f6465267765696768743d3530302673697a653d3230266475726174696f6e3d333230302670617573653d39303026636f6c6f723d3230424546462663656e7465723d74727565267643656e7465723d747275652677696474683d383230266c696e65733d412b7363686564756c65722b70696e67732b4769744875622b416374696f6e732b61742b7468652b74696d652b796f752b63686f6f73653b4b6167676c652b6c61756e636865732b7468652b6e6f7465626f6f6b2b6f6e2b612b54342b4750553b47656d6d612b72656164732b32302d33302b61727469636c65732b616e642b7069636b732b7468652b73696e676c652b626573742b6f6e653b412b5044462b776974682b74616b6561776179732b616e642b612b776f72642b6f662b7468652b6461792b6c616e64732b696e2b796f75722b696e626f78" alt="Typing animation"&gt;
&lt;/a&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="https://github.com/bytebymanas/sift-ai/actions" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e0e9212667c12eb2938ed38d4fe855a2dfc0ecf9527368e8d473f446fb597282/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6279746562796d616e61732f736966742d61692f6461696c795f636f6c61625f747269676765722e796d6c3f7374796c653d666f722d7468652d6261646765266c6f676f3d676974687562616374696f6e73266c6f676f436f6c6f723d7768697465266c6162656c3d4441494c5925323052554e266c6162656c436f6c6f723d306630633239" alt="Daily Run"&gt;&lt;/a&gt;
&lt;a href="https://github.com/bytebymanas/sift-ai/commits" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e223faff4415388df36deadcbc7bf3a4ba91cd91103e777834f2175af6a5c034/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f6279746562796d616e61732f736966742d61693f7374796c653d666f722d7468652d6261646765266c6f676f3d676974266c6f676f436f6c6f723d7768697465266c6162656c436f6c6f723d30663063323926636f6c6f723d333032623633" alt="Last Commit"&gt;&lt;/a&gt;
&lt;a href="https://github.com/bytebymanas/sift-ai/stargazers" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/40de9e9ccfddc413c51ded895d9fb36dc12767c23883d312a887b96dcfb93fb5/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6279746562796d616e61732f736966742d61693f7374796c653d666f722d7468652d6261646765266c6f676f3d676974687562266c6f676f436f6c6f723d7768697465266c6162656c436f6c6f723d30663063323926636f6c6f723d323042454646" alt="Stars"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/a456b39d6bf1313603f216dd70ef101f3ab0bfd344eae8a720092b3f2cbe25a2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b6167676c652d54345f4750552d3230424546463f7374796c653d666c61742d737175617265266c6f676f3d6b6167676c65266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/a456b39d6bf1313603f216dd70ef101f3ab0bfd344eae8a720092b3f2cbe25a2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b6167676c652d54345f4750552d3230424546463f7374796c653d666c61742d737175617265266c6f676f3d6b6167676c65266c6f676f436f6c6f723d7768697465" alt="Kaggle"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b5b04ec0c56df5c1994173d0f9982ea3a3dba875011fbe8710d0c6706bcf4e3d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4372657741492d4167656e74732d4646344234423f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/b5b04ec0c56df5c1994173d0f9982ea3a3dba875011fbe8710d0c6706bcf4e3d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4372657741492d4167656e74732d4646344234423f7374796c653d666c61742d737175617265" alt="CrewAI"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0ecf80fe32a5e0757b5d5dff64422133737c116ddfdf64676de62d9ddf31ef46/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4f6c6c616d612d47656d6d612d3131313131313f7374796c653d666c61742d737175617265266c6f676f3d6f6c6c616d61266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/0ecf80fe32a5e0757b5d5dff64422133737c116ddfdf64676de62d9ddf31ef46/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4f6c6c616d612d47656d6d612d3131313131313f7374796c653d666c61742d737175617265266c6f676f3d6f6c6c616d61266c6f676f436f6c6f723d7768697465" alt="Ollama"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/87f243968af2b60c4fe9ad0c1eb3059b14589efe804f4f73a8e43867fb075605/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302d3337373641423f7374796c653d666c61742d737175617265266c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/87f243968af2b60c4fe9ad0c1eb3059b14589efe804f4f73a8e43867fb075605/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302d3337373641423f7374796c653d666c61742d737175617265266c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465" alt="Python"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/091527477bd95bad254063b83fd7e8997dd64846df832db0ee00ac0d685362c0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f57656173795072696e742d5044462d3841324245323f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/091527477bd95bad254063b83fd7e8997dd64846df832db0ee00ac0d685362c0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f57656173795072696e742d5044462d3841324245323f7374796c653d666c61742d737175617265" alt="WeasyPrint"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/317f317b0d9c4962b9100e8efdf6c83b8c043b35c8494ce9a95d279fe1564149/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f73742d253234302d3265613434663f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/317f317b0d9c4962b9100e8efdf6c83b8c043b35c8494ce9a95d279fe1564149/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f73742d253234302d3265613434663f7374796c653d666c61742d737175617265" alt="Cost"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/bytebymanas/Sift-AI#-how-it-works" rel="noopener noreferrer"&gt;How it works&lt;/a&gt;&lt;/strong&gt; &amp;nbsp;·&amp;nbsp; &lt;strong&gt;&lt;a href="https://github.com/bytebymanas/Sift-AI#-the-agents" rel="noopener noreferrer"&gt;The agents&lt;/a&gt;&lt;/strong&gt; &amp;nbsp;·&amp;nbsp; &lt;strong&gt;&lt;a href="https://github.com/bytebymanas/Sift-AI#-setup" rel="noopener noreferrer"&gt;Setup&lt;/a&gt;&lt;/strong&gt; &amp;nbsp;·&amp;nbsp; &lt;strong&gt;&lt;a href="https://github.com/bytebymanas/Sift-AI#-customize-your-feed" rel="noopener noreferrer"&gt;Customize&lt;/a&gt;&lt;/strong&gt; &amp;nbsp;·&amp;nbsp; &lt;strong&gt;&lt;a href="https://github.com/bytebymanas/Sift-AI#-faq" rel="noopener noreferrer"&gt;FAQ&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;◈ The Idea&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Most news is noise. &lt;strong&gt;Sift AI&lt;/strong&gt; searches news sources and editorial feeds, reads and cleans &lt;strong&gt;20 to 30 full-text candidates&lt;/strong&gt;, and hands you exactly one article worth your time, complete with key takeaways and a word of the day to grow your vocabulary.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;No server stays on. No LLM API is billed. Nobody has to press a button.&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="25%"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Daily&lt;/h3&gt;
&lt;/div&gt;
At the time you choose
&lt;/td&gt;
&lt;td width="25%"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;1 Article&lt;/h3&gt;
&lt;/div&gt;
Chosen from 20–30 candidates
&lt;/td&gt;
&lt;td width="25%"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;4 Agents&lt;/h3&gt;

&lt;/div&gt;
Select · Summarize · Vocab
&lt;/td&gt;
&lt;td width="25%"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;$0&lt;/h3&gt;

&lt;/div&gt;
Inference cost
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/bytebymanas/Sift-AI" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;What I used&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Models&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Gemma 4 26B (A4B)&lt;/strong&gt; as the editor, &lt;strong&gt;Gemma 4 E4B&lt;/strong&gt; for the summarizer and vocab agents. Both are open-weight&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inference&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; on Kaggle's free GPU, fully local to the kernel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;CrewAI&lt;/strong&gt;, 4 agents across 2 models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discovery&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NewsData API (per-topic queries) and editorial RSS via &lt;code&gt;feedparser&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scraping&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;requests&lt;/code&gt;, BeautifulSoup, plus a garbage-phrase filter for paywall and comment text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HTML template, &lt;strong&gt;WeasyPrint&lt;/strong&gt; (PDF), Gmail SMTP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wake-up&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;cron-job.org, then GitHub &lt;code&gt;repository_dispatch&lt;/code&gt;, then &lt;strong&gt;GitHub Actions&lt;/strong&gt;, then Kaggle CLI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dev workflow&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;GitHub Copilot&lt;/strong&gt;: coding agent, code review and CLI (details below)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;A funnel, not a feed.&lt;/strong&gt; Wide net first, then ruthless narrowing: many queries and feeds, about 20 to 30 cleaned full-text candidates, one winner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Right model for each job.&lt;/strong&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A picky editor.&lt;/strong&gt; 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 &lt;em&gt;preference&lt;/em&gt;, not a filter, so a great article outside them still beats a mediocre one inside them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Laziness took three rewrites.&lt;/strong&gt; 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 &lt;code&gt;schedule&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automated with GitHub Actions.&lt;/strong&gt; 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;A lazy system has to be cheap to leave running forever. That's only possible because the models are open.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;I swapped the whole brain in two lines.&lt;/strong&gt; Sift AI started on Qwen 2.5 7B and Qwen 3 1.7B. When Gemma 4 landed in Ollama, I changed two &lt;code&gt;ollama pull&lt;/code&gt; lines 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs $0 in LLM inference, forever.&lt;/strong&gt; 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I chose the model for each job.&lt;/strong&gt; 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My reading stays mine.&lt;/strong&gt; My topics and reading history go to a model running inside my own kernel, not a third-party LLM provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I own the editor's judgment.&lt;/strong&gt; 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.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API would have made this a "pay per morning" product. Open models made it a fire-and-forget habit.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;The planning session where I designed the funnel and split the work across 4 agents:&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://chatgpt.com/share/6adb9d2d-db2c-83ee-811d-b6414c0c5b24" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fogimg.chatgpt.com%2Fconversation%2F6adb9d2d-db2c-83ee-811d-b6414c0c5b24%2Fresponse_multicolor_v1.png" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://chatgpt.com/share/6adb9d2d-db2c-83ee-811d-b6414c0c5b24" rel="noopener noreferrer" class="c-link"&gt;
            ChatGPT - NEWS AI 
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Here's a chat someone thought you'd want to see.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fchatgpt.com%2Ffavicon.ico" width="800" height="400"&gt;
          chatgpt.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; 60+ minutes a day of searching and tab-hopping, and I rarely retained anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt; one PDF, a few minutes of reading, one new word.&lt;/p&gt;

&lt;p&gt;From this week:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your chosen time:&lt;/strong&gt; the scheduler fires automatically, day after day&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;20 to 30 articles&lt;/strong&gt; read and cleaned by the crew every run, so I read 1&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0 clicks&lt;/strong&gt; on the days it ran on its own&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Maintenance: renewing one token now and then. 🦥&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gemma:&lt;/strong&gt; 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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Best Use of GitHub Copilot:&lt;/strong&gt; the whole project is automated with GitHub Actions (scheduler trigger → &lt;code&gt;repository_dispatch&lt;/code&gt; → Actions → Kaggle CLI → run notebook), with no server and no manual step.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://dev.to/bytebymanas"&gt;Manas&lt;/a&gt;. Sift through the noise. Keep the signal.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>gemma</category>
      <category>githubactions</category>
    </item>
  </channel>
</rss>
