<?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: Muhammad Khizar</title>
    <description>The latest articles on DEV Community by Muhammad Khizar (@khizzcr7).</description>
    <link>https://dev.to/khizzcr7</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%2F4195937%2F3935efa1-add4-408f-8351-1559116f1eb4.png</url>
      <title>DEV Community: Muhammad Khizar</title>
      <link>https://dev.to/khizzcr7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/khizzcr7"/>
    <language>en</language>
    <item>
      <title>Digest Sloth: Drop Files In, Wake Up to a Digest 🦥</title>
      <dc:creator>Muhammad Khizar</dc:creator>
      <pubDate>Tue, 20 Oct 2026 10:16:01 +0000</pubDate>
      <link>https://dev.to/khizzcr7/digest-sloth-drop-files-in-wake-up-to-a-digest-1a01</link>
      <guid>https://dev.to/khizzcr7/digest-sloth-drop-files-in-wake-up-to-a-digest-1a01</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;Every team I know has the same graveyard: chat exports nobody re-reads, meeting notes nobody opens twice, long documents we all keep "meaning to get to". The information is in there — the decisions, the action items, the deadlines — but getting it back out costs more attention than anyone has.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Digest Sloth&lt;/strong&gt; is my answer, and it takes the week's theme literally. You drop &lt;code&gt;.txt&lt;/code&gt; or &lt;code&gt;.md&lt;/code&gt; files into an &lt;code&gt;inbox/&lt;/code&gt; folder — a week of team chat, yesterday's meeting notes, that 30-page spec — and walk away. A small &lt;strong&gt;open-weight model running entirely on your own machine&lt;/strong&gt; works through them the way a sloth would: one small chunk at a time, in no hurry, checkpointing its progress to disk after every single chunk. When you come back, there is one tidy &lt;code&gt;digest.md&lt;/code&gt; waiting for you: a TL;DR for every file, the key points, and the action items pulled out as a checklist.&lt;/p&gt;

&lt;p&gt;Who gets to be lazier? Anyone who has ever scrolled a 400-message chat thread at 9 AM trying to remember what was decided. The reading is done while your laptop is idle — overnight, over lunch, whenever. Interrupt it as often as life requires: close the lid, kill the process, run out of battery. It resumes exactly where it stopped and never redoes finished work. Slow, steady, and genuinely hard to break.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&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%2Fmtp4snjyobz8qc873r6b.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%2Fmtp4snjyobz8qc873r6b.png" alt="Digest Sloth terminal run: chunk-by-chunk progress with checkpoints" width="800" height="423"&gt;&lt;/a&gt;&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%2Fri3smouyjc7wbxu7lldm.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%2Fri3smouyjc7wbxu7lldm.png" alt="The finished digest.md: TL;DR, key points and action items per file" width="800" height="1597"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The whole thing runs locally, so the fastest demo is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run demo     &lt;span class="c"&gt;# seeds the inbox with a sample team chat + meeting notes&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;out/digest.md
npm run serve    &lt;span class="c"&gt;# read the digest in your browser at http://localhost:4173&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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/khizzcr7" rel="noopener noreferrer"&gt;
        khizzcr7
      &lt;/a&gt; / &lt;a href="https://github.com/khizzcr7/digest-sloth" rel="noopener noreferrer"&gt;
        digest-sloth
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Drop files in, wake up to a digest. A slow-and-steady overnight digest agent powered by a local open-weight model (Qwen2.5-0.5B via Transformers.js). Built for DEV Hacktoberfest Week 3: Slow and Steady.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🦥 Digest Sloth&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Drop files in. Wake up to a digest.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Digest Sloth is a tiny overnight digest agent for people who keep meaning to
read things. Drop text files into a folder — team chat exports, meeting
notes, long documents — and it works through them &lt;em&gt;slowly&lt;/em&gt;: one small chunk
at a time, powered by a &lt;strong&gt;local open-weight model&lt;/strong&gt;, checkpointing after
every chunk. In return you get a single tidy digest with a TL;DR, key
points, and action items for each file.&lt;/p&gt;
&lt;p&gt;Built for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19" rel="nofollow"&gt;Hacktoberfest Open-Source AI Challenge: Week 3 — Slow and
Steady&lt;/a&gt; on DEV.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why a sloth?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Because the design is the joke &lt;em&gt;and&lt;/em&gt; the engineering:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Small chunks.&lt;/strong&gt; A modest model on a modest laptop cannot swallow a
40-page document. It can absolutely summarize 130 words. So Digest Sloth
splits everything into bite-sized pieces and map-reduces them into a
summary — slow, steady, and…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/khizzcr7/digest-sloth" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The project is a Node.js + TypeScript codebase (about 2,100 lines): a sentence-aware chunker, a local model wrapper, a checkpoint store, a CLI that doubles as a zero-dependency web viewer for the finished digest, plus the partner integrations below. Samples are included so &lt;code&gt;npm run demo&lt;/code&gt; works the second you clone it.&lt;/p&gt;

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

&lt;p&gt;The stack is deliberately boring, because the interesting decision is the model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model: Qwen2.5-0.5B-Instruct (Apache-2.0 open weights)&lt;/strong&gt;, run locally through &lt;a href="https://github.com/huggingface/transformers.js" rel="noopener noreferrer"&gt;Transformers.js&lt;/a&gt; in Node.js. No API key, no account, no cloud. The 4-bit quantized model downloads once (~750 MB) and every run after that works completely offline. (I first tried FLAN-T5, an encoder-decoder summarizer, and it kept echoing the input text back instead of summarizing — a small instruction-tuned model turned out to be the right tool.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chunking:&lt;/strong&gt; files are split at sentence boundaries into ~130-word pieces. A small local model cannot swallow a whole document, but it can summarize 130 words beautifully — so the project is built around that limit instead of fighting it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Map-reduce summarization:&lt;/strong&gt; each chunk gets a one-or-two-sentence summary; those summaries are merged into a per-file TL;DR, and a final pass extracts action items and follow-ups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checkpointing (the "steady" half):&lt;/strong&gt; after &lt;em&gt;every&lt;/em&gt; chunk, the state is written to &lt;code&gt;.state/progress.json&lt;/code&gt; atomically (temp file + rename, so a crash mid-write cannot corrupt it). Files are content-hashed, so editing one file in the inbox reprocesses only that file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A tiny web viewer:&lt;/strong&gt; &lt;code&gt;npm run serve&lt;/code&gt; renders the digest in the browser with a hand-rolled Markdown converter and zero extra dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I picked a half-billion-parameter model on purpose: it is small enough to run on the kind of underpowered laptop most people actually have, and this challenge is about conserving energy – mine and the machine's. If your machine has more to give, one environment variable (&lt;code&gt;MODEL_ID&lt;/code&gt;) points the same code at a larger open-weight model and the summaries get sharper.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The partner stack – every one of these was run for real on 20-23 October, inside the challenge window:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma (Google):&lt;/strong&gt; &lt;code&gt;--model gemma&lt;/code&gt; swaps the brain to Google's Gemma 3 1B (open weights, ONNX) through the same pipeline – a full demo run produced a complete digest with zero cloud calls. Two open-weight models, one flag.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mastra:&lt;/strong&gt; the whole pipeline re-expressed as a typed Mastra workflow (&lt;code&gt;npm run digest:mastra&lt;/code&gt;); ran both sample files through the local model and wrote a real digest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporal:&lt;/strong&gt; the same pipeline as a durable Temporal workflow – verified against a local Temporal dev server, worker bundled the workflow, client executed it, real digest written.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentry:&lt;/strong&gt; a live traced run – one &lt;code&gt;digest.run&lt;/code&gt; span over per-chunk &lt;code&gt;model.chat&lt;/code&gt; spans, flushed cleanly to a real Sentry project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browserbase (Stagehand):&lt;/strong&gt; drop a &lt;code&gt;.url&lt;/code&gt; file in the inbox and it is fetched, chunked, and digested – verified end to end.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN (Prior Labs):&lt;/strong&gt; &lt;code&gt;scripts/tabpfn_priority.py&lt;/code&gt; scores every action item low/medium/high with TabPFN's tabular foundation model through the live Prior Labs API – real account, real token, real scores, verified end to end.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SerpApi:&lt;/strong&gt; &lt;code&gt;--enrich&lt;/code&gt; adds live web context to action items — verified end to end against the real SerpApi API on 23 October.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honest limits: the repo also ships a &lt;code&gt;render.yaml&lt;/code&gt; and code-complete integrations for ElevenLabs, MongoDB Atlas, Auth0, Tiger Data, Backboard, and Ultramarine, but Render needs a payment card on file before it will create even a free service, ElevenLabs' free API tier refuses library voices unless you pay, MongoDB Atlas wants the account password, and Auth0 and Backboard are parked at a phone verification step — so I am not claiming their prize categories. Tinker's API key is in hand and the SFT dataset builder ships in &lt;code&gt;scripts/&lt;/code&gt;, but no fine-tune run has been submitted (Tinker serves hosted models, so a fine-tune cannot drop into the local ONNX pipeline anyway); not claimed. Arduino needs physical UNO Q hardware, which I do not have, so no claim there.&lt;/p&gt;

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

&lt;p&gt;This project only makes sense &lt;em&gt;because&lt;/em&gt; the model is open:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Privacy is the feature.&lt;/strong&gt; The entire point is feeding the tool your private group chats and internal meeting notes. With a closed API, the first thing your "lazy tool" does is upload your team's conversations to someone else's server. With open weights running locally, those files never leave the machine. For this use case, open is not a nice-to-have – it is the difference between a tool you can actually use and one you cannot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works offline.&lt;/strong&gt; No connection, no problem. The digest runs on a train, in a village with patchy internet, during an outage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It is free forever.&lt;/strong&gt; Set it up once and it never asks for a subscription, a top-up, or a new pricing tier. Laziness should not have a monthly fee.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anyone can adapt it.&lt;/strong&gt; Swap in a bigger model on a beefier machine, a smaller one on a weaker laptop, or a model that speaks your language better – the code does not care, because nothing is locked behind one vendor's API.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;I ran it on the bundled demo – a team chat export and a set of meeting notes, 726 words of source – on a modest 2-core machine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;~75 seconds end-to-end, 11 model calls, zero cloud calls.&lt;/strong&gt; Out came a structured digest: a TL;DR per file, the key points, and an action-item checklist (it correctly pulled out things like "rework the settings page danger zone" and "prepare a one-page summary of the top ten support issues").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The second run took 0.3 seconds and made zero model calls.&lt;/strong&gt; Every chunk resumed from its checkpoint. That is the honest test of the design: once the sloth has done a piece of work, it never does it again.&lt;/li&gt;
&lt;li&gt;Scale that to a real week – several thousand words of chat and notes – and it is the difference between re-reading threads before standup and glancing at one page while the kettle boils. And because it checkpoints after every chunk, you can start it, close the laptop, and let tomorrow's run finish the job.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One honest limitation: a 0.5B model occasionally attributes a point to the wrong person. The substance stays faithful, and a bigger local model fixes most of the polish – but I would rather ship the version that runs on any laptop, privately, for free.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma ($200 featured) – &lt;code&gt;--model gemma&lt;/code&gt; preset, verified with a full local run&lt;/li&gt;
&lt;li&gt;Best Use of Mastra ($100) – pipeline as a typed Mastra workflow, verified end to end&lt;/li&gt;
&lt;li&gt;Best Use of Temporal ($100) – durable workflow verified against a local dev server&lt;/li&gt;
&lt;li&gt;Best Use of Sentry ($100) – live traced run with per-chunk spans&lt;/li&gt;
&lt;li&gt;Best Use of Browserbase ($100) – &lt;code&gt;.url&lt;/code&gt; inbox files fetched and digested, verified end to end&lt;/li&gt;
&lt;li&gt;Best Use of TabPFN ($200 featured) – action-item priority scoring through the live Prior Labs API, verified end to end&lt;/li&gt;
&lt;li&gt;Best Use of SerpApi ($100) — &lt;code&gt;--enrich&lt;/code&gt; web context for action items, verified end to end against the live API&lt;/li&gt;
&lt;/ul&gt;




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