GNU Emacs Knowledge System, for note taking and self testing.

About

Gnosis is a personal knowledge management and spaced repetition system for Emacs. It integrates two complementary subsystems in a single package: a Zettelkasten-style note system called nodes, and a flashcard-based self-testing system built around themata. Both subsystems share a single SQLite database, and their contents are designed to be linked together so that flashcard questions can refer directly to the notes they are drawn from.

The name gnosis (Greek: γνῶσις, knowledge) reflects the package’s philosophical orientation: the goal is not mere memorization but the deliberate construction of knowledge over time.

Why Gnosis

Most spaced repetition tools treat flashcards as isolated units. You create a card, review it, and the system schedules the next review. The cards have no relationship to each other or to anything outside the review loop.

Most note-taking tools do the opposite: they help you build a web of interconnected ideas, but they offer no mechanism for systematically testing and reinforcing what you have written.

Gnosis bridges these two approaches. Your notes and your review material live in the same system, linked together. When you write a node about a topic, you can create themata whose questions reference that node. When you review, you can review all the questions linked to a given note, or follow the link graph to review related topics. The goal is a single system where understanding and recall reinforce each other.

Installation

Gnosis is available via GNU ELPA, & GNU Guix

Example using use-package

(use-package gnosis
  :init
  (define-prefix-command 'my/gnosis-map)
  (define-prefix-command 'my/gnosis-nodes-map)
  (define-prefix-command 'my/journal-map)
  :config
  (setf gnosis-journal-file (expand-file-name "journal.org.gpg" gnosis-journal-dir)
        gnosis-journal-as-gpg t
        gnosis-nodes-show-tags t
        gnosis-script-input-method-alist
        '((greek . "greek-polytonic")
          (cyrillic . "cyrillic-translit")))

  (setf gnosis-custom-values
        '((:tag "demo" (:proto (1 3) :anagnosis 3 :amnesia 0.45 :epignosis 0.5
                                 :agnoia 0.4 :lethe 2))
          (:tag "English" (:amnesia 0.55 :proto (0 1 3) :lethe 2
                                      :epignosis))
          (:tag "vocabulary" (:amnesia 0.65 :proto (0 1 3))))
        gnosis-nodes-timestring t)
  :bind (("C-c c" . 'my/gnosis-map)
         ("C-c n" . 'my/gnosis-nodes-map)
         ("C-c j" . 'my/journal-map)
         :map my/gnosis-map
         ("d" . 'gnosis-dashboard)
         ("j j" . 'gnosis-journal)
         ("j f" . 'gnosis-journal-find)
         ("n i" . 'gnosis-nodes-insert)
         ("n t" . 'gnosis-nodes-insert-template)
         ("S" . 'gnosis-nodes-db-sync)
         :map my/gnosis-nodes-map
         ("f" . 'gnosis-nodes-find)
         ("S" . 'gnosis-nodes-db-sync)
         ("t" . 'gnosis-nodes-insert-template)
         ("i" . 'gnosis-nodes-insert)
         ("d" . 'gnosis-nodes-delete-file)
         :map my/journal-map
         ("j" . 'gnosis-journal)
         ("f" . 'gnosis-journal-find)
         :map gnosis-nodes-mode-map
         ("C-c i" . 'org-id-get-create))
  :custom
  (gnosis-vc-auto-push t)
  (gnosis-default-average-review-period 30)
  (gnosis-algorithm-day-start-hour 3))

Screenshots

Figure 1: gnosis basic note

Figure 1: gnosis basic note

Figure 2: gnosis basic review answer

Figure 2: gnosis basic review answer

Figure 3: gnosis cloze note type

Figure 3: gnosis cloze note type

Figure 4: gnosis post review

Figure 4: gnosis post review