What I Built
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:
- What actually happened
- What needs you specifically (bills, tasks, direct questions)
- Upcoming deadlines and events
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. 🦥
Demo
The tool runs from your terminal, but there's also a Flask web UI for those who prefer a browser:
# Run the digest
slothdigest run
# Or use the web UI
python run_webui.py
# Opens at http://localhost:5000
Generated digest (Markdown):
# SlothDigest — 2026-10-24
## 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.
Code
The entire project is open source on GitHub:
🔗 github.com/akshrakothari/SlothDigest
Quick start
git clone https://github.com/akshrakothari/SlothDigest.git
cd SlothDigest
pip install -e .
slothdigest init --name "Your Name"
# Drop WhatsApp exports into inbox/
slothdigest run
Architecture at a glance
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
Key design decisions
| 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). |
How I Built It
The open-source AI stack
Ollama — The backbone. Every LLM call goes to a local Ollama instance. I tested with:
- Qwen 2.5 7B (default — great balance of speed + quality)
- Llama 3.1 8B
- Gemma 2 9B
- Mistral 7B
The model handles four specific tasks, each with a carefully crafted prompt:
- Chunk summarization — "Summarize these messages in 3-5 bullet points"
- Reduce step — "Combine chunk summaries into a 2-line overall summary + 3 highlights"
- Deadline extraction — "Extract deadlines, tasks, events, and payment obligations"
- Needs-you detection — "Which messages need this person's attention?"
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.
How the pipeline works
┌──────────┐ ┌───────────┐ ┌────────────┐ ┌──────────┐
│ WhatsApp │ │ Parser │ │ Noise │ │ Chunker │
│ .txt file │──▶│ (Android/ │──▶│ Filter │──▶│ (smart │
│ │ │ iOS) │ │ │ │ windows)│
└──────────┘ └───────────┘ └────────────┘ └──────────┘
│
▼
┌──────────┐ ┌───────────┐ ┌───────────────────────┐
│ Renderer │◀──│ Reducer │◀──│ Chunk Summarizer │
│ MD+HTML │ │ (final │ │ (Ollama map step) │
│ + ICS │ │ digest) │ └───────────────────────┘
└──────────┘ └───────────┘
The agent that built itself
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.
Why Does Open Innovation Matter?
This project would be impossible without open innovation.
If I had built SlothDigest with a closed API like OpenAI or Claude:
- Privacy nightmare — Every WhatsApp message would be sent to a US-based server. Family conversations, payment screenshots, medical discussions — all processed by a third party.
- No customization — I couldn't tune the prompts for WhatsApp-specific patterns (Hinglish dates, emoji-heavy texts, voice-message references).
- No offline use — No internet at your parents' village house? Too bad. No server connectivity? No digest.
- Vendor lock-in — If the API changes pricing or policies, the project breaks.
- No experimentation — I tested 4 different models and picked the best one. With closed APIs, you use what they give you.
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.
My Agent Session
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:
- 16 source modules (parser, chunker, summarizer, renderer, etc.)
- 10 test files covering every module
- 3 output formats (Markdown, HTML, iCalendar)
- Web UI with Flask (dashboard, upload, digest viewer, config)
- Deploy automation (35+ file assembly from scattered source directories)
The Lazy Payoff
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.
Prize Categories
- General — Complete, functional open-source AI project -Backboard Studio -Cursor
SlothDigest v0.1.0 — Built with 🦥 in October 2026 for Hacktoberfest.
Top comments (0)