跳到正文
DEV Community· Nurstar -·· 3 小時前AI 評分53

Lazybrief:以本地 Gemma 夜間整理的延後處理收件匣

Lazybrief: a do-it-later inbox made by an aeon agent that sorts itself overnight on a local Gemma

AI 導讀

Nurstar 開發 Lazybrief,這款以本地 Gemma 3 和 Ollama 運作的延後處理收件匣會在夜間為項目分類、設定優先次序及排程,並生成五行晨間摘要。

正文

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

What I Built

Lazybrief is a do-it-later inbox that sorts itself overnight on a local, open-weight model.

During the day you dump things into it with one command: a link you don't have time to read, a half-formed idea, "renew the domain before Friday." No folders, no tags, no decisions.

Overnight, Gemma 3 running under Ollama goes through the pile. It gives every item a topic, a priority and a schedule bucket (today, this-week, someday or drop), groups related items together, and writes a five-line morning brief. The drop bucket matters most. The model is allowed to decide that something isn't worth your time, like a newsletter you already read, and retire it.

Nothing leaves your machine. There's no API key, no account, no per-token bill. It's for anyone whose "read later" pile has quietly turned into a graveyard.

It comes in two forms:

  • a standalone CLI (add, list, brief, doctor, stats), Python standard library only
  • an Aeon skill that runs the brief on an overnight cron and sends the five lines to Telegram, Discord or Slack through Aeon's notifier

Demo

Terminal demo: eleven dumped items become a five-line brief on a local Gemma

That's a real run of gemma3 (3.9B parameters, Q4 quantization) on an Apple M4 laptop, sorting the 11-item sample inbox that ships with the repo. In the recording the model's thinking time is trimmed: the brief takes about 18 to 21 seconds end to end on that machine. This is what it produced:

*Lazybrief — 2026-10-20*
• Renew the domain before Friday.
• Reply to the brief length issue.
• Check the new Ollama release changelog.
• Investigate caching the model warmup.
• Drop: Newsletter already read.

Behind those five lines, the full brief puts the 11 items in four groups: Admin (today), Personal (today), AI research (this week), and Dropped.

To run the same demo yourself: ollama pull gemma3, clone the repo, then ./demo/record-demo.sh.

Code

GitHub logo NurstarK / lazybrief

A do-it-later inbox that sorts itself overnight on a local Gemma (Ollama). Dump links, notes and todos all day; wake up to a five-line brief.

Lazybrief

A do-it-later inbox that sorts itself overnight on a local Gemma.

Be lazy during the day: dump links, notes, and todos into the inbox with one command. Overnight, a local open-weight model (Gemma via Ollama) reads the whole pile, dedupes it, clusters it by theme, assigns each cluster a priority and a do-it-later schedule bucket, and collapses everything into a five-line morning brief. You wake up to five lines instead of fifty tabs.

Nothing leaves your machine. No API key, no cloud bill, no account. The model is open-weight; the agent harness around it (Aeon aaronjmars's open-source project) is open-source. The whole thing is free and offline.

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


Quick start (one command)

./setup.sh

That checks Python 3 (standard library only — nothing to pip install), and if Ollama is installed…

How I Built It

The stack is all open. The model is Gemma 3 served by Ollama on localhost. The CLI is one Python file with no dependencies. Storage is plain append-only JSONL: add appends a line, and brief reads the pile, calls the model, writes a dated markdown brief and archives what it processed. There's no database and nothing running in the background.

The first version came from an agent. I gave my Aeon agent a short written brief describing the challenge. It produced a working first version of the CLI, the tests, the demo script and the skill wrapper in a single GitHub Actions run. The lazy theme seemed to call for that.

Testing against the real model changed the design. The first version asked Gemma to return clusters that referenced items by number. On a real run the 4B model lost track of the numbers: a note about a paper was filed under "Operational Tasks," and one item disappeared from the brief entirely. A small model handles labelling one item at a time far better than juggling indices, so brief now makes two passes:

  1. Label. The model goes through every item and returns a topic, priority and schedule for each. The code does the grouping, so items that share a topic land in the same cluster.
  2. Write. The model writes the five-line brief from the already-grouped result. The brief can only talk about decisions the first pass actually made, which fixed a run where the brief said a link was dropped while the clusters had kept it.

After that change, repeated runs on the sample inbox grouped the items the same way each time.

Nothing silently disappears. Output from a local model isn't always well-formed, so the code checks it. Unknown priorities and buckets are coerced to safe defaults, references to items that don't exist are ignored, anything the model skipped goes into an "Unsorted" group, dropped items always get their own "Dropped" group, and the brief is capped at five lines. An offline test suite covers all of this without needing a model.

Aeon handles what a model shouldn't. As an Aeon skill, the overnight run is a cron entry, and the five-line brief goes to Aeon's ./notify, which sends it to whatever chat channels you've set up. Aeon is an open-source agent harness created by aaronjmars; I'm a contributor. One honest limit: the model lives on localhost, which a hosted GitHub Actions runner can't reach, so the overnight job belongs on your own machine or a self-hosted runner.

Why Does Open Innovation Matter?

The whole idea depends on a model you can download once and run as often as you like, on your own machine, on your own pile of half-thoughts. That pile is low-stakes, high-volume and a little private. Nobody wants to pay per token to sort their grocery notes, or send them to someone else's server. With a metered, closed API, the cost of each run would kill the habit. With open weights, a run costs nothing, so it can happen every night.

It matters one layer up too. Because Aeon is open, a new skill can sit next to the existing ones and reuse its scheduler and notifier instead of rebuilding them. Open weights and an open harness are what turn a script into a small, free, private agent that runs while you sleep.

The Lazy Payoff

The cost of a "read later" pile is that eventually someone has to sort it. Lazybrief hands that job to a laptop that would otherwise be idle overnight: about 20 seconds of local compute for an 11-item inbox, with nothing to pay and nothing to set up beyond ollama pull gemma3.

Prize Categories

  • Gemma. Gemma 3 does all of the model work: labelling every item, deciding what to drop, and writing the brief.

來源:DEV Community · dev.to