Skip to content

feat(skills): add lazybrief — overnight do-it-later inbox on a local Gemma - #1255

Closed
NurstarK wants to merge 1 commit into
aeonfun:mainfrom
NurstarK:feat/lazybrief-skill
Closed

NurstarK wants to merge 1 commit into
aeonfun:mainfrom
NurstarK:feat/lazybrief-skill

Conversation

@NurstarK

@NurstarK NurstarK commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

What

Adds lazybrief to the Productivity pack: a do-it-later inbox that sorts itself overnight on a local, open-weight model.

Dump links, notes and todos during the day (add); on the overnight cron a local Gemma 3 (4B, Q4) via Ollama labels each item (topic, priority, bucket) and writes a five-line morning brief, delivered through ./notify. Four buckets: today / this-week / someday / drop — the model is allowed to decide an item isn't worth keeping. Plain append-only JSONL, Python stdlib only, no API keys, no per-token cost; nothing leaves the machine.

The skill itself is thin by design: it runs doctor (model reachable?), runs brief exactly once (it archives the inbox), sends the result through ./notify, and logs the count. All model work lives in the lazybrief app.

Operational notes

  • The model lives on localhost:11434, so this only runs on a self-hosted runner (or locally) — the SKILL.md says so explicitly, and it ships disabled by default in aeon.yml.
  • On a down model it notifies with --severity warn and stops; it never sends an empty or invented brief and never silently falls back to --offline.
  • No secrets. Optional env: LAZYBRIEF_MODEL, OLLAMA_HOST, LAZYBRIEF_HOME.

Changes

  • skills/lazybrief/SKILL.md — the skill (category productivity, mode write, capabilities: sends_notifications)
  • catalog/skills.json, catalog/packs.json — regenerated (86 → 87 skills)
  • catalog/skill-icons.json + generated docs/assets/skill-icons/lazybrief.svg + apps/dashboard/lib/skill-icons.data.ts — new glyph (inbox tray + crescent moon)
  • .github/README.md, docs/skill-packs.md, docs/aeon-setup.md, docs/examples/README.md, docs/assets/hero-animated.svg — count bumps + productivity table row (validate-readme-catalog passes)
  • aeon.yml — lazybrief: { enabled: false, schedule: "0 5 * * *" } under Ideas & productivity (validate-config passes)
  • eyebrowlock.json — lazybrief entry appended via eyebrow scan (0.5.6). The existing 0.4.1-generated entries are deliberately left untouched so this PR doesn't re-approve 48 unrelated drift entries; eyebrow verify --ci passes.

Local checks run

check-skill-categories.sh, generate-skills-json, generate-skill-icons --check, generate-packs-json, validate-readme-catalog.mjs, validate-config.js, eyebrow verify --ci — all green.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

…Gemma

Dump links, notes and todos during the day; a local Gemma 3 (via Ollama)
sorts them overnight into four buckets (today / this-week / someday / drop)
and sends a five-line morning brief through ./notify. No cloud, no API
keys, nothing leaves the machine — runs on a self-hosted runner only,
since the model lives on localhost:11434. Disabled by default in aeon.yml.

Skill app: https://github.com/NurstarK/lazybrief
DEV Hacktoberfest entry: https://dev.to/nurstar__ac8b784c29de45d/lazybrief-a-do-it-later-inbox-made-by-an-aeon-agent-that-sorts-itself-overnight-on-a-local-gemma-4h40

Includes the regenerated catalogs (skills.json, packs.json, icons),
docs/README count bumps (86 -> 87), and the eyebrowlock.json entry
(appended via eyebrow 0.5.6 scan; existing 0.4.1 entries left untouched
to keep the diff reviewable).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@Svector-anu Svector-anu left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ran the full local checklist against this branch, not just the ci checkmarks: check-skill-categories, check-capabilities-parity, validate-config.js, validate-readme-catalog.mjs, generate-skills-json and generate-packs-json (ci's own normalized diff), generate-skill-icons --check, lint-shell.sh, biome ci ., dashboard typecheck, and the dashboard test suite (323/323). all pass.

the skill is thin as described: shells out to an app repo the operator installs separately, no secrets, mode write with only sends_notifications, ships disabled, fails safe (warn + stop) when the local model is down, each step is its own bash call per the sandbox rule.

one nit, not blocking: the pr description says the eyebrowlock.json update leaves the 48 unrelated entries untouched. it actually re-serializes two of them (snippet field, >/& to literal >/&, an eyebrow 0.4.1 to 0.5.6 escaping difference), same content, same findings. worth knowing, not worth changing.

approving.

@aaronjmars

Copy link
Copy Markdown
Collaborator

love the idea but it doesn't fit canon: skills run on hosted runners with no local model, and on a self-hosted runner checkout wipes apps/lazybrief before every run. it also clones your repo unpinned and runs it with the instance token.

ship it as a community pack instead: add a skills-pack.json to the lazybrief repo and list it in the packs registry, happy to merge that.

@aaronjmars

Copy link
Copy Markdown
Collaborator

quick bump on this one: still not a fit for canon (hosted runners have no local model, checkout wipes apps/lazybrief + its inbox on self-hosted, and it clones unpinned code that runs with the fleet token).

community pack is the way: add a skills-pack.json to NurstarK/lazybrief, pin the app to a tag or sha, open the registry entry PR, and i'll merge that. will close this once the pack PR is up.

@NurstarK

Copy link
Copy Markdown
Contributor Author

pack PR is up: #1273. skills-pack.json + skills/lazybrief/SKILL.md now live in NurstarK/lazybrief, install pinned to the v0.1.0 tag, and the docs keep the app (and its inbox) outside the aeon checkout so self-hosted checkout can't wipe it. fine to close this one.

aaronjmars pushed a commit that referenced this pull request Oct 26, 2026
Registry entry + Listed packs row for NurstarK/lazybrief (1 skill,
category productivity, capabilities: sends_notifications, no secrets).
Pack manifest lives in the repo at skills-pack.json; app install is
pinned to the v0.1.0 tag. validate-skill-packs.mjs and validate-pack.sh
both pass locally.

Replaces #1255 per maintainer review (community pack instead of canon).

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
@aaronjmars

Copy link
Copy Markdown
Collaborator

Closing in favor of the Lazybrief community pack, merged in #1273. Thanks!

@aaronjmars aaronjmars closed this Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants