DEV Community

Nora Aguirre
Nora Aguirre

Posted on

Sloth Digest: a local AI that reads my group chats while I sleep

Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady Submission πŸ¦₯

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady

What I Built

Group chats pile up overnight. Reading 200 messages to find the two that matter ("can you send me the pricing doc by Wednesday?") is work nobody wants to do.

Sloth Digest does that reading for me. I drop my exported WhatsApp chats into a folder, and every morning a local model has already written one Markdown file with:

  • Needs you: only the tasks assigned to me, with their deadlines.
  • Per chat: a short summary and the key dates.

Pizza orders, coffee tips and football talk are ignored. I set it up once with Windows Task Scheduler, and after that I do nothing. I just open the file.

It is for anyone who wants to stay on top of busy group chats without scrolling through them, and who doesn't want to upload those chats to someone else's server to do it.

Demo

All the chats in the video are invented samples. Here is what the digest looks like for the sample chat:

# Morning digest, 2026-10-23

## Needs you
- Send the updated pricing doc, due: Wednesday at noon. Asked by Maya in chat-team
- Review slides, due: Tomorrow afternoon. Asked by Priya in chat-team

## chat-team
The team needs to finalize the client demo, with Sam responsible for sending the updated
pricing document by Wednesday at noon... The demo time has been moved to Thursday at 4:30 PM.

- Client Demo: Thursday at 4:30 PM
Enter fullscreen mode Exit fullscreen mode

Code

GitHub logo nora-programadora / sloth-digest

Local AI that reads your exported chats overnight and leaves a short morning digest. Runs offline with Ollama. + Gemma

sloth-digest πŸ¦₯

A local AI that reads your exported group chats while you sleep and leaves a short morning digest. No cloud, no API key, no cost per message.

License: MIT Node Model: Gemma 3 Runtime: Ollama

Built for the Hacktoberfest Open-Source AI Challenge, Week 3: Slow and Steady.

  • πŸ“ Read the post on DEV: POST
  • πŸŽ₯ Demo video: VIDEO DEMO

The problem

Group chats pile up overnight. Reading 200 messages to find the two that matter ("can you send me the pricing doc by Wednesday?") is work nobody wants to do.

What it does

  1. You drop exported WhatsApp chats (.txt) into inbox/.
  2. At a scheduled time (for example 6 am), a local model reads them.
  3. You wake up to one Markdown file with:
    • Needs you: only the tasks assigned to you, with deadlines.
    • Per chat: a two-sentence summary and the key dates.

Small talk (pizza, coffee, football) is ignored.

Example output (from the…

How I Built It

Stack: Gemma 3 (4B, open-weight) running through Ollama, with Node.js and TypeScript. The model runs locally, and the scheduled run uses Windows Task Scheduler calling a script inside WSL.

WhatsApp exports (.txt) β†’ parser β†’ Gemma 3 via Ollama (JSON Schema output)
β†’ code-side logic (assignee filter, dates) β†’ daily Markdown digest
Enter fullscreen mode Exit fullscreen mode
  1. Parser. It turns the export into clean messages: it skips system lines, keeps multi-line messages together and drops <Media omitted>.
  2. Structured output. I call Ollama's /api/chat with a JSON Schema in the format field, temperature: 0 and an explicit num_ctx, so the model always returns valid, predictable JSON.
  3. The model extracts, the code decides. The model lists every task in the chat with an assignee. Plain code then keeps only the ones for me and works out which message each deadline came from.
  4. Scheduling. A small shell script runs the digest, and a Windows scheduled task calls it through wsl.exe every morning. Ollama runs on Windows and the project lives in WSL, so I used WSL's mirrored networking mode to let them talk over localhost.

What went wrong, and what I changed

I tested on a synthetic chat with known answers: two tasks for me, one meeting time that changes, and lots of small talk. A 4B model made real mistakes, and fixing them taught me the most important lesson of the project.

Run Change What went wrong
1 Baseline prompt A task Maya had promised to do was listed as mine; "tomorrow" left unresolved; the detail "include monthly and annual plans" got lost
2 Asked the model to resolve dates Dates became absolute, but the model invented times (4:00 PM, 9:00 AM) and picked the wrong day for "tomorrow"
3 Model extracts all tasks with an assignee, code filters Assignment fixed, but dates still inconsistent
4 Model copies deadlines verbatim, no date arithmetic All 5 tasks correct, no invented times. Still missing "monthly and annual"

The lesson: with a small model, don't ask for judgment or arithmetic that code can do. "Is this task for me?" and "what day is tomorrow?" are easy to verify in code and unreliable in a 4B model. Extraction stays with the model, and the rest moves to code.

Limitations

  • Details spread across messages can be lost (the "monthly and annual" requirement never made it into the task).
  • Long chats are not chunked yet, so very long ones may be cut off by the context window.
  • Only WhatsApp .txt exports in one locale format for now.
  • Tested on one synthetic chat, not on a large or varied set.

Why Does Open Innovation Matter?

  • My chats stay on my machine. A digest of private group chats is exactly the kind of data I don't want to send to a server I don't control.
  • No cost per message. I can process every chat every day without watching a bill.
  • Swapping models is one variable. OLLAMA_MODEL=gemma3:12b npm run digest -- inbox changes the model without touching the code. When a 4B model fails at something, I can try another open model instead of waiting for a provider.
  • I could see and fix the failures. Because I control the prompt, the schema, the model and the code around it, I could trace each mistake and decide whether it belonged to the prompt or to code.

I did not compare it against a closed API, so I'm not claiming it is more accurate than one. What I can say is that this design is possible without my chats leaving my laptop.

The Lazy Payoff

  • Speed: about 20 seconds for the 32-message sample chat on my laptop (Ryzen AI 9 HX 370, 63 GB RAM, integrated GPU only).
  • Effort: - Effort: for the 32-message sample chat, reading it by hand took me about 5 min and reading the digest about 30 seconds. The sample is small, so the saving is modest; the point is that a morning with 10 busy chats becomes one file. I haven't measured that with real chats.
  • Zero effort after setup: one scheduled task, then nothing to do.

Top comments (0)