This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
What I Built
Torpor — a lazy, fully-local overnight inbox digest. Instead of reading every message that came in overnight, you run one command and torpor reads them for you, using only open-weight models running on your own machine. Named after the energy-saving dormant state that animals — sloths included — drop into when there's no reason to spend effort.
Point it at a JSON file of messages and it: embeds each one locally, scores it against a handful of "this needs a human" reference phrases by meaning (not keyword matching), splits messages into "needs you" vs. "can wait" using the inbox's own score distribution, and asks a local model to write a genuine 2–3 sentence summary of what actually matters.
It also has a small local knowledge-bot mode: point it at any folder and ask it a question in plain English, and it'll find the relevant parts and answer with citations — the same local embed-and-answer pipeline, just pointed at files instead of messages.
Demo
$ ollama pull qwen3:8b
$ ollama pull nomic-embed-text
$ npm start
torpor: barely awake. 10 messages to get through, so I'll do it.
While you were asleep: 3 of 10 actually need you. The other 7 can wait.
In short (qwen3:8b, running right here):
Partner NDA requires your signature by Friday's kickoff call to avoid delaying
the start date. Overdue invoice #4471 ($3,200) risks service interruption if
not paid by end of day. Production deploy failed at 2am due to a database
migration error; no one has addressed it yet.
Worth getting up for:
[0.64] legal@example.com — NDA needs your signature
[0.59] billing@vendor-example.com — Invoice #4471 overdue
[0.58] ops@example.com — Production deploy failing
Can stay asleep for these:
[0.57] friend@example.com — lunch next week?
[0.56] priya@example.com — Quarterly numbers due
[0.55] security-alert@example.com — New sign-in detected
...
That whole run takes a few seconds, on a laptop, offline.
$ node src/index.mjs ask src "how does torpor decide which messages need attention?"
Torpor decides which messages need attention by using a scoring system based
on statistical thresholds. The `splitByAttention` function [5] calculates the
mean and standard deviation of attention scores for all messages. It then
sets a threshold at the mean plus 0.5 times the standard deviation...
From:
[1] index.mjs:97
[2] index.mjs:65
[3] digest.mjs:65
[4] index.mjs:33
[5] digest.mjs:33
Code
https://github.com/chiragmangaldev3112/torpor
How I Built It
Two separate local-AI calls, both through Ollama: nomic-embed-text for embeddings, qwen3:8b for the summary. A naive fixed similarity threshold only caught 1 of 3 real urgent messages in testing — cosine similarity on short text clusters tightly — so the "needs you" split uses an adaptive threshold (the inbox's own mean + half a standard deviation) instead of a magic number.
The whole thing is model-agnostic by design: swap TORPOR_CHAT_MODEL to run it on a different model entirely, with no code changes.
Why Does Open Innovation Matter?
-
It runs with no internet and no API key. The whole pipeline — embeddings and the summary — happens on
localhost:11434. - Your messages never leave your machine. An overnight digest is, by definition, a summary of everything you haven't read yet — sending that to someone else's model every night is a real privacy cost a local model avoids entirely.
- It's free to run forever. No per-token billing on something meant to run every day, unattended.
- You can swap the model. Nothing here is tied to one vendor — change an env var, use a different model you've pulled.
This idea grew out of a larger assistant platform I'm building separately, where open-weight models aren't a one-off choice — a repository gets searched with local embeddings, a small model can be fine-tuned on someone's own writing through a local LoRA pipeline, and step-by-step task decisions are made by a local model through the same provider-agnostic interface. Torpor builds the first of those — local code search and Q&A — from scratch, and it's real working code in this repo, not just a description: src/codesearch.mjs chunks any folder, embeds it locally, and answers questions with citations, the same embed-then-chat pattern the inbox digest uses on messages.
The Lazy Payoff
Before: open the inbox, scan every message, figure out what's actually urgent. After: run one command, read three sentences, know exactly what needs you — the overdue invoice, the failed deploy, the NDA deadline, not the lunch invite.
Honest caveat: the attention/FYI split is a simple statistical heuristic, not a trained classifier — it missed a security alert in testing (landed just under the threshold). Good enough for a weekend build, not a production safety net.
Prize Categories
Best Use of Gemma — Torpor is model-agnostic by design (TORPOR_CHAT_MODEL env var), and I tested it end-to-end against Google's Gemma 3 via Ollama: both the inbox digest and the code-search ask command work correctly. One honest note — Gemma 3 tends to answer in a numbered list even when asked for short prose, where qwen3:8b writes flowing sentences; still accurate, just a different style.













