Skip to content

Spaced repetition

Spaced repetition turns pages you want to remember into flashcards without you writing a single card by hand. Flag a page or directory, and a background agent derives cards from its content and keeps them in sync as you edit. A dedicated review page runs you through the cards that are due, front then back, graded on a keyboard, on intervals computed by FSRS.

Set metadata.srs.enabled: true on any page, or on a directory to cover everything under it (see page metadata for how metadata inherits). The toggle lives right on the page: flip it on and a card list appears showing every derived card with a due chip, so you can see at a glance what’s queued without leaving the page.

metadata:
srs:
enabled: true

An agent, flashcard-deriver, maintains the card set for every opted-in page. It runs outbox-triggered: any edit to an opted-in page fires it, debounced so an editing burst coalesces into one re-derive rather than one per keystroke, the same debounce shape the search indexer uses for re-embedding. Card generation is idempotent, so re-deriving after a small edit updates only what changed without minting duplicate cards for untouched content.

Near-duplicates merge instead of piling up

Section titled “Near-duplicates merge instead of piling up”

Two opted-in pages often cover overlapping ground, and a derivation run can phrase the same fact twice. Every time a page’s cards are (re)derived, a background pass compares the new set against itself and — via embedding similarity — against your cards on other pages, then sorts each close pair into one of three outcomes:

  • Near-exact duplicates merge automatically. The copy with the most review history survives, keeping its FSRS schedule; the other is removed and remembered, so re-deriving its source page cannot resurrect it while the surviving card exists.
  • Same question, different answers is never merged silently — it lands in the task queue as a confirm-or-dismiss card showing both cards side by side. Confirm merges them; Dismiss records the pair as distinct so it is never proposed again.
  • Borderline similarity is referred to a small LLM judge. A “distinct” verdict is remembered; anything else becomes the same confirm-or-dismiss card, so no model verdict ever deletes a card on its own.

The same dedup pass covers cards the deriver creates, manual “derive now” runs, and the stock usage deck — every path cards are created through.

Fresh and upgraded homes include three short SRS-enabled pages under stock-help/: navigation, outlining, and workflows. They are source-controlled by the standalone subspace-usage content plugin, so the deck remains useful even when a larger help corpus is not installed.

The source pages and nodes carry stable ids. A content-plugin version bump therefore updates the same pages and deterministic cards in place, preserving page-version and FSRS review history. If a later version removes a still-plugin-owned source, Subspace moves the page to trash, disables SRS, and clears its cards. Strip the page’s plugin provenance when you intentionally turn it into a local fork; subsequent plugin updates then leave it alone.

The review page runs at /p/flashcards. Open it directly, or arrive from the not-now screen’s flashcard CTA.

  1. Pick a scope

    Choose a specific topic (an opted-in page or directory) or review a mixed session pulling due cards from everywhere you’ve enabled SRS.

  2. Reveal

    Each card shows its front first. A key press (or click) reveals the back.

  3. Grade

    Grade the card Hard, OK, Easy, or Archive. The grade feeds directly into ts-fsrs, which computes the card’s next interval; Archive pulls a card out of rotation entirely rather than scheduling it again.

  4. Next

    The session advances to the next due card automatically. The whole flow is keyboard-first: reveal, grade, and advance without reaching for the mouse.

Every card carries a panel back to its source, so if a grade surprises you, you jump straight to the originating page and node. Review access is ACL-scoped like everything else in the knowledge base: you only ever review cards derived from pages you can read.

The review page is also the destination for the not-now screen’s “Review due flashcards instead” call to action: when a restriction locks a surface (mail, the task queue, IM), the lock screen offers a flashcard session as the productive alternative to whatever you were trying to open.