Gnosis (γνῶσις) is a spaced repetition system (SRS) implementation for note taking and self testing, for GNU Emacs.

Gnosis does not use flashcard type learning, instead it uses a binary value to rate user input. Meaning you either know the right answer, or you do not, no rating of your own is involved.

*Update: Visit this user-manual for updated information on gnosis. Consider this as an just old blog post about my project.

About

On my last post, Spaced Repetition Software Gripes, I outlined a blueprint for what I consider to be the optimal design of an SRS, that caters to my personal preferences.

So, I’ve developed my own SRS, gnosis (γνῶσις), pronounced “noh-sis”, meaning knowledge in Greek. This SRS addresses the concerns that I previously highlighted. Currently, I have found it to be highly beneficial and, as a result, I decided to share it with all of you.

Differences with other SRS

Gnosis does not implement flashcard type review sessions where the user rates his own answer on an arbitrary scale. Instead implements “note” types that require user input. Some of these note types, like the MCQ multiple choice question, even allow for simulating real-life exams.

Unlike other SRS implementations for GNU Emacs, gnosis does not rely on org-mode, which I’ve found not to be an ideal option for a database replacement. Instead opting for an sqlite database with git to track any changes made, enabling efficient data management, manipulation and data integrity.

Furthermore, since Gnosis is built upon Emacs, with Emacs Lisp, it offers a convenient and (hopefully) enjoyable experience for customization according to your individual preferences.

However, one drawback of using Gnosis is that it is not currently supported on mobile devices, as Emacs has yet to extend its compatibility to such platforms.

Installation

You can get gnosis from my personal git server here or using this sourcehut mirror.

Straight.el

(straight-use-package 
 '(gnosis :type git
	      :host nil
	      :repo "https://git.thanosapollo.org/gnosis"))

Manual

$ git clone https://git.thanosapollo.org/gnosis

Add this to your emacs configuration:

   (add-to-list 'load-path "/path/to/gnosis")
   (load-file "~/path/to/gnosis.el")
   (require 'gnosis)

Adding notes

Creating notes for gnosis can be done with a simple M-x gnosis-add-note

Everything is done through the mini-buffer. My personal workflow takes advantage of that by not really leaving gnosis-add-note prompt until I finish studying a chapter/section, using pdf-tools or nov.el.

I think you won’t need much guidance on creating notes for any note type, except cloze.

Creating cloze type notes

Cloze type note questions are formatted similarly to Anki’s syntax, like so:

{c1:Cyproheptadine} is a(n) {c2:5-HT2} receptor antagonist used to treat {c2:serotonin syndrome}

NOTE: You can also format clozes like Anki if you so prefer; e.g {{c1::Cyproheptadine}}

  • For each cX-tag there will be created a cloze type note, the above example creates 2 cloze type notes.

  • Each cX tag can have multiple clozes, but each cloze must be a UNIQUE word (or a unique combination of words) in given note.

Customizing gnosis algorithm

gnosis-algorithm-interval

This is a list of 2 numbers, for the first 2 intervals after a successful review. For example:

(setq gnosis-algorithm-interval '(1 3))

After first successfully reviewing a note, you will see it again tomorrow, if you successfully review said note again, the next review will be after 3 days.

gnosis-algorithm-ef

This is the value of gnosis “easiness factor”, it’s basically a list that consists of 3 items. The first item is the increase factor, used to increase the easiness factor upon successful review. Second item refers to the decrease factor, used to decrease the easiness factor upon an unsuccessful review. The third item is the (starting) total easiness factor, used to calculate the next interval.

The basic’s of how this is used is that it’s being multiplied with the last interval, e.g if you last reviewed a note 6 days ago, and the easiness factor (total) of this note is 2.0, your next interval would be 6 * 2.0 & the next total ef will be 2.0 + increase-factor.

Example configuration:

(setq gnosis-algorithm-ef '(0.3 0.3 1.3))

gnsois-algorithm-ff

This is the value of gnosis forgetting factor (ff), it needs to be a floating number below 1. This is used to calculate the next interval upon an unsuccessful review, by being multiplied with last interval. If for a note with a value of last-interval of 6 days and a ff of 0.5, upon an unsuccessful review the next interval will be in 6 * 0.5 days

Example configuration:

(setq gnosis-algorithm-ff 0.5)