DEV Community

Cover image for Moss: A Local-First Assistant That Grows on You While You Sleep 🦥
Soham Maity
Soham Maity

Posted on

Moss: A Local-First Assistant That Grows on You While You Sleep 🦥

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

What I Built

Moss is a local-first assistant that does the chores you put off — while you sleep. It runs entirely on your own machine using open-weight models (via Ollama), and leaves a single Morning Brief each day summarizing what it did.

Three "sloth" skills, one CLI:

  • moss tidy ~/Downloads — sort, rename, archive clutter (dry-run by default)
  • moss digest whatsapp.txt — two-line summary, who you owe, dates, ignore verdict
  • moss fridge fridge.jpg — grocery list from a fridge photo
  • moss nap — run everything configured overnight, write the Morning Brief
  • moss undo — restore the last tidy run exactly, byte for byte

The Morning Brief is a single self-contained HTML file (inline CSS, inline SVG sloth, no JS, no CDN) plus a Markdown twin. It works offline, is dark-mode ready, and mobile-friendly.

Example output:

$ moss nap --demo --paranoid
Morning. Moss finished while you slept.
Brief: /home/soham/Moss/morning/2026-10-23.html
       /home/soham/Moss/morning/2026-10-23.md
Cloud API cost: $0.00
Paranoid proof: 0 outbound connections attempted. Model ran on localhost only.
Enter fullscreen mode Exit fullscreen mode

Demo

Moss is local-first by design, so there's nothing to deploy — it runs on your laptop. Try the full pipeline with no model installed:

pip install -e .
ollama pull qwen3:4b
cp moss.example.yaml ~/Moss/moss.yaml
# edit ~/Moss/moss.yaml to taste
moss nap --demo --paranoid
Enter fullscreen mode Exit fullscreen mode

The --demo flag uses a mock backend, so no model download is required. Add --paranoid to prove zero outbound connections.

Code

Moss is MIT-licensed, written in Python 3.11+, and structured around a backend-agnostic LLM interface (BaseBackend with generate and generate_json) so you can swap Ollama, llama.cpp/LM Studio, or a deterministic mock in one line.

Install and run:

pip install -e .
moss nap --demo --paranoid
Enter fullscreen mode Exit fullscreen mode

Skills live in src/moss/skills/ (tidy, digest, fridge), extraction in src/moss/extract/ (PDF, DOCX, mbox, WhatsApp, Telegram, plain text), and storage is SQLite with an append-only undo journal for byte-for-byte restoration.

Moss

Does the work while you hang around.

A local-first assistant that grows on you while you sleep. Built for the "Slow and Steady" theme (International Sloth Day): open-weight models at its core, runs entirely on your own machine, and rewards laziness by doing the chores you put off.

What it does (15 seconds)

Moss runs overnight and leaves a single Morning Brief (~/Moss/morning/YYYY-MM-DD.html + a .md twin). It has three sloths ("skills"), one CLI:

$ moss tidy ~/Downloads          # sort, rename, archive clutter (dry-run by default)
$ moss digest whatsapp.txt        # two-line summary, owes, dates, ignore verdict
$ moss fridge fridge.jpg          # grocery list from a fridge photo
$ moss nap                        # run everything configured, write the Morning Brief
$ moss undo                       # restore the last tidy run exactly

Example terminal transcript:

$ moss nap --demo --paranoid
Morning. Moss finished while you slept
Brief: /home/soham/Moss/morning/2026-10-23.html
       /home/soham/Moss/morning/2026-10-23.md
Cloud API
…

How I Built It

Moss is built around open-weight models running locally, not closed cloud APIs.

  • Backend: Ollama (localhost:11434) with qwen3:4b for text tasks (tidy, digest) and qwen2.5vl:7b for vision (fridge photo). Verified end-to-end with gemma4:31b-cloud (32.7B on CPU) via Ollama.
  • Backend abstraction: A common BaseBackend interface keeps skills backend-agnostic. A MockBackend powers --demo mode, so the full pipeline runs with no model installed — essential for hackathon sandboxes without Ollama.
  • Stack: Python 3.11, Typer (CLI), Rich (terminal output), Pydantic v2 (config), PyYAML, psutil (battery/idle detection), pypdf + python-docx + Pillow (extraction), Jinja2 (brief HTML), httpx (Ollama client), SQLite (cache + undo journal), pytest + ruff.
  • Paranoid mode: --paranoid monkeypatches socket.socket so any non-loopback connection raises OfflineError. Proof: 0 outbound connections — nothing phones home.
  • Slow and steady: Runs at nice -n 19, skips runs on battery below 40%, caches decisions by content hash so nothing repeats, and schedules at 2:00 AM by default.

Why Does Open Innovation Matter?

Open innovation made Moss possible in ways a closed API never could:

  1. Airplane mode works. moss paranoid proves 0 outbound connections. Your model runs on localhost; nothing leaves the machine.
  2. Your data stays put. Downloads, WhatsApp exports, email, fridge photos — all processed locally. No uploads to third-party servers.
  3. Zero cost. Cloud API cost: $0.00. No subscription, no per-call fees, no model deprecation risk.
  4. You own the behavior. Swap models with moss use gemma3:4b. Edit prompts and config in moss.yaml. Hosted assistants don't let you do this.

A hosted assistant would need your personal chats and file contents sent to a third party, wouldn't work without internet, would charge recurring fees for a nightly job, and could deprecate the model you depend on overnight. Moss avoids all of that.

My Agent Session

The Lazy Payoff

Moss saves you from the chores you keep postponing: sorting a messy Downloads folder, summarizing long WhatsApp threads, checking what's missing from the fridge. It runs overnight at low priority (nice -n 19), so you wake up to a done list instead of a to-do list. The undo journal means you can restore any tidy run byte-for-byte if you change your mind.

Prize Categories

  • Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady

tags - #devchallenge #hacktoberfest #ai #opensource #python

Top comments (0)