Every morning, most of us wake up to 500+ unread WhatsApp messages across family groups, college groups, project teams, and neighborhood associations. Scrolling through them is exhausting. What if you could just get a calm, two-paragraph summary of:
I built SlothDigest — a local-first CLI agent that does exactly that. Drop your WhatsApp .txt exports into an inbox/ folder, run one command, and get a clean digest in Markdown, HTML, or even an .ics calendar file.
It runs 100% locally using open-weight models via Ollama. No data ever leaves your machine. Privacy-first by design.
And because mornings should be lazy, it has Sloth Mode — if your laptop is on battery or the CPU is busy, it defers processing until you're plugged in and relaxed. 🦥
The tool runs from your terminal, but there's also a Flask web UI for those who prefer a browser:
slothdigest run
python run_webui.py
Generated digest (Markdown):
## family_group.txt
**Mom's planning Diwali dinner on Nov 1, and Dad fixed the WiFi router**
- Papa called Airtel and the WiFi will be back by evening
- Mom confirmed Diwali dinner — everyone needs to bring one dish
- Rohan scored 92% on his math test 🎉
## needs_you
### family_group.txt
- **Mom** (14:32): Raha, can you pick up sweets from Bikaner vala on the way home?
- **Dad** (15:10): Beta, send me the Airtel bill number, I need to follow up
## deadlines
- **Diwali dinner** (event) — 2026-11-01
- **Airtel bill payment** (payment) — 2026-10-25
- **Rohan's PTM** (event) — 2026-10-28 at 10:00
The same content is rendered as a beautiful 📱 phone-friendly HTML page and an .ics calendar file you can import into Google Calendar or Apple Calendar.
The entire project is open source on GitHub:
🔗 github.com/akshrakothari/SlothDigest
git clone https://github.com/akshrakothari/SlothDigest.git
cd SlothDigest
pip install -e .
slothdigest init --name "Your Name"
slothdigest run
inbox/ ← Drop WhatsApp .txt exports here
src/slothdigest/
├── cli.py ← Typer CLI (init/run/schedule/wipe)
├── config.py ← JSON config in ~/.config/slothdigest/
├── parser.py ← Android & iOS chat export parser with Hinglish date support
├── noise_filter.py ← Drops system messages, spam, forwards
├── chunker.py ← Smart message chunking that preserves conversation threads
├── summarizer.py ← Map-reduce summarization pipeline
├── ollama_client.py← Ollama local LLM client
├── deadlines.py ← Deadline extraction with relative date resolution ("kal", "parso")
├── needs_you.py ← "Needs you" detection (mentions, questions, tasks)
├── renderer.py ← Outputs MD + HTML + ICS
├── sloth_mode.py ← Defers when on battery or high CPU
├── privacy.py ← Network guard, data wipe
├── scheduler.py ← Windows schtasks / cron installer
├── state.py ← Incremental processing via state files
├── pipeline.py ← Orchestrates everything
└── webui.py ← Flask web UI (optional)
tests/ ← Pytest test suite
| Decision | Why |
|---|---|
| 100% local | Your WhatsApp data never touches the cloud. Only allowed Ollama URLs are reachable. |
| Map-reduce summarization | Handles 1000+ messages by chunking, summarizing each chunk, then reducing into a final digest. |
| Incremental processing | Tracks last-processed timestamps — only new messages are summarized. |
| Quiet-night detection | If a chat has <10 meaningful messages, it just says "Quiet night". |
| Sloth mode | Defers processing when on battery or CPU > 80%. |
| Hinglish support | Understands "kal" (yesterday/tomorrow), "parso" (day after), "agle somwar" (next Monday). |
Ollama — The backbone. Every LLM call goes to a local Ollama instance. I tested with:
The model handles four specific tasks, each with a carefully crafted prompt:
Temperature 0.1 keeps the model grounded and factual. Every prompt asks for structured JSON output, with robust fallback parsing if the model hallucinates the format.
┌──────────┐ ┌───────────┐ ┌────────────┐ ┌──────────┐
│ WhatsApp │ │ Parser │ │ Noise │ │ Chunker │
│ .txt file │──▶│ (Android/ │──▶│ Filter │──▶│ (smart │
│ │ │ iOS) │ │ │ │ windows)│
└──────────┘ └───────────┘ └────────────┘ └──────────┘
│
▼
┌──────────┐ ┌───────────┐ ┌───────────────────────┐
│ Renderer │◀──│ Reducer │◀──│ Chunk Summarizer │
│ MD+HTML │ │ (final │ │ (Ollama map step) │
│ + ICS │ │ digest) │ └───────────────────────┘
└──────────┘ └───────────┘
Here's the wild part: most of this code was written by an AI coding agent. I described the architecture, and the agent wrote the 16+ source files, 10 test files, and the deploy infrastructure — all in a single continuous session.
This is the future of open-source contribution: describe what you want, and let AI handle the implementation while you focus on design, privacy, and architecture decisions.
This project would be impossible without open innovation.
If I had built SlothDigest with a closed API like OpenAI or Claude:
Open-weight models (Qwen, Llama, Mistral, Gemma) running locally via Ollama make this project possible. The model runs on a $0 inference budget. Your data stays on your laptop. You can audit every single prompt and response.
Open innovation means privacy-first, cost-free, customizable AI that anyone can run, modify, and trust.
This project was built in a single continuous AI-agent session using Backboard's dev platform. The agent read the project requirements, created the architecture, wrote every line of source code, generated the test suite, built the deploy infrastructure, and assembled this blog post.
The session spanned:
Here's what SlothDigest actually saves you every morning:
| Without SlothDigest | With SlothDigest |
|---|---|
| Scroll through 500+ messages | Read a 2-paragraph digest |
| 15-20 minutes of doom-scrolling | 30 seconds of browsing |
| Miss deadlines in noisy chats | Deadlines extracted to your calendar |
| Forget to reply to someone who asked you | "Needs you" section catches it |
| Read ads, forwards, "Good morning!" images | Noise filter drops them automatically |
The name "SlothDigest" is a double joke — it works like a slow, thoughtful sloth (deferring work), and it saves you time so you can be the sloth.
SlothDigest v0.1.0 — Built with 🦥 in October 2026 for Hacktoberfest.