Skip to content

Second-brain review

The Second-Brain Review turns your slip-box into a weekly ritual: run one command and ZettelFlow generates a review note summarizing your thinking over the last 7 days, with a next action per section. It is a byproduct of the model your workflows already populate — no separate tracker.

Running it

Run "Generate weekly review" from the command palette. ZettelFlow writes and opens _ZettelFlow/reviews/Weekly review <YYYY-MM-DD>.md — one note per day, overwritten if you run it again the same day. If the knowledge index is still building, it tells you to try again in a moment.

What's in the digest

Over a rolling 7-day window ending now, four sections (empty ones are omitted):

Section What it shows Next action
Ideas created this week notes whose created falls in the window review them
Orphans notes nothing links to connect them
Forgotten ideas notes untouched for ≥ 30 days (STALE_DAYS), oldest first (up to 10) review them
Important but unreviewed hubs (degree ≥ 5) that are also stale review them

Each note is an extensionless [[wikilink]], so every item is one click from opening it.

Honest limits

The review reads the in-memory Knowledge Model, which carries only created and modified timestamps — there are no per-edge timestamps, so "connections made this week" isn't computable and is deferred; "forgotten" and "important-but-unreviewed" are scoped to modified recency. A weekly review.due event trigger and a configurable window are also deferred follow-ups.

Architecture

computeWeeklyReview(model, now, windowDays)   (pure, Obsidian-free, unit-tested)
  → { windowDays, sections: [{ key, count, paths, action }] }   composes query/queries.ts

renderWeeklyReviewMarkdown(review, labels, dateLabel)   (pure, no i18n import, unit-tested)
  → markdown with [[wikilinks]] + a "Next: …" line per section

GenerateWeeklyReviewComponent (PluginComponent)
  registers "generate-weekly-review" (no hotkey)
  guards KnowledgeIndex readiness → compute → render → FileService.writeFile (create-or-overwrite) → open