This is gnosis.info, produced by makeinfo version 7.2 from gnosis.texi.

INFO-DIR-SECTION Emacs misc features
START-INFO-DIR-ENTRY
* Gnosis: (gnosis).     Spaced Repetition System.
END-INFO-DIR-ENTRY


File: gnosis.info,  Node: Top,  Next: Introduction,  Up: (dir)

Gnosis User Manual
******************

Gnosis is a learning tool designed to enhance memory retention by
integrating a thema-taking system with spaced repetition and
self-testing.

This manual is written for Gnosis version 0.5.8, released on 2025-11-08.

   • Manual:
        • <https://elpa.nongnu.org/nongnu/doc/gnosis.html>
        • <https://thanosapollo.org/projects/gnosis/> (Mirror)
   • Git repositories:
        • <https://git.thanosapollo.org/gnosis>
        • <https://codeberg.org/thanosapollo/emacs-gnosis> (Mirror)
        • 
          <https://git.savannah.gnu.org/cgit/emacs/nongnu.git/?h=elpa/gnosis>
          (Mirror)

* Menu:

* Introduction::
* Getting started Tutorial::
* Thema Types::
* Linking gnosis themata to org-gnosis content::
* Customization::
* Gnosis Algorithm::
* Import & Export::
* Editing themata::
* Sync between devices::
* Interactions with other software::
* Contributing::

-- The Detailed Node Listing --

Getting started Tutorial

* Gnosis Dashboard::
* Linking Themata to Note Topics::

Thema Types

* Cloze::
* MCQ::

Cloze

* Default cloze format::
* Using anki-like syntax::

Customization

* Typos | String Comparison::

Gnosis Algorithm

* Anagnosis Event::
* Lethe event::
* Proto::

Import & Export

* Exporting a deck::
* Importing a deck::

Interactions with other software

* emacs-no-littering::

Contributing

* Patches Require Copyright Assignment To The FSF::
* How to create a patch::


File: gnosis.info,  Node: Introduction,  Next: Getting started Tutorial,  Prev: Top,  Up: Top

1 Introduction
**************

Gnosis consists of a note-taking module (‘org-gnosis’) and a
self-testing module.  Users can utilize each module independently, but
the intended workflow combines both:

  1. Write notes on a topic with ‘M-x org-gnosis-find’.
  2. Create themata (flashcard-like questions) related to the topic with
     ‘M-x gnosis-add-thema’.
  3. Link themata to note topics by inserting org-gnosis links in the
     keimenon or parathema with ‘M-x org-gnosis-insert’.
  4. Review themata with spaced repetition via ‘M-x gnosis-review’, or
     review all themata linked to a specific topic via ‘M-x
     gnosis-review-topic’.

   Gnosis and org-gnosis maintain separate SQLite databases.  The gnosis
database stores themata, decks, review history, and links from themata
to org-gnosis nodes.  The org-gnosis database stores nodes, tags, and
links between nodes.  This separation allows each module to function
independently while enabling the linked workflow described above.

   The spaced repetition algorithm is highly adjustable, allowing users
to set specific values not just for thema decks but for tags as well.
See *note Gnosis Algorithm:: for details.


File: gnosis.info,  Node: Getting started Tutorial,  Next: Thema Types,  Prev: Introduction,  Up: Top

2 Getting started Tutorial
**************************

To follow this tutorial, clone the demo deck available at codeberg

   Demo Deck: <https://codeberg.org/thanosapollo/gnosis-demo>

   Import it to your gnosis collection via ‘M-x gnosis-import-deck’

* Menu:

* Gnosis Dashboard::
* Linking Themata to Note Topics::


File: gnosis.info,  Node: Gnosis Dashboard,  Next: Linking Themata to Note Topics,  Up: Getting started Tutorial

2.1 Gnosis Dashboard
====================

The first thing new users should familiarize themselves with is
‘gnosis-dashboard’, which you can access via ‘M-x gnosis-dashboard’.

   The dashboard home menu (‘h’) provides four sections:

   • *Navigate* - Browse nodes (‘n’) and themata (‘t’)
   • *Actions* - Review (‘r’), add thema (‘a’), add deck (‘d’),
     monkeytype (‘m’), history (‘h’)
   • *Import/Export* - Export deck (‘e’), import deck (‘i’)
   • *Maintenance* - Sync/rebuild nodes, link integrity checks

   You can start a review session from the dashboard by pressing ‘r’ or
with ‘M-x gnosis-review’.

   NOTE: Gnosis supports reviewing specifics topics for notes of
‘org-gnosis’ with ‘M-x gnosis-review-topic’

   You can add new themata from the dashboard ‘a’ or with ‘M-x
gnosis-add-thema’


File: gnosis.info,  Node: Linking Themata to Note Topics,  Prev: Gnosis Dashboard,  Up: Getting started Tutorial

2.2 Linking Themata to Note Topics
==================================

We can create a demo note topic for Vancomycin, an antibiotic, with ‘M-x
org-gnosis-find RET Vancomycin’.  For this demo, just save the buffer
contents by pressing ‘C-x C-s’.

   Back to the dashboard ‘M-x gnosis-dashboard’, we can view all our
themata by pressing ‘t’ or we can press ‘SPC’ to search our themata.
For this demo, we are looking for a thema from the demo deck we
imported, that contains a questions about ‘Vancomycin’.

   To link that thema to the note topic we created before, press ‘e’ to
edit the thema.  In the ‘Keimenon’ section delete "Vancomycin" and press
‘M-x org-gnosis-insert RET Vancomycin’.

   After saving the thema with ‘M-x C-c C-c’, you can review all themata
linked to that topic by ‘M-x gnosis-review-topic’.

   View more on *note Linking gnosis themata to org-gnosis content::.


File: gnosis.info,  Node: Thema Types,  Next: Linking gnosis themata to org-gnosis content,  Prev: Getting started Tutorial,  Up: Top

3 Thema Types
*************

Each note is a *thema* consisting of the following components:

   • *Keimenon*; The main text or question.
   • *Hypothesis*; Assumptions/hints for the text to guide to the right
     answer
        • For example this is used as hints for cloze type or as choices
          in MCQs
   • *Answer*; The correct response or solution to the keimenon.
   • *Parathema*; expansion of keimenon, that can include links to e.g
     org-gnosis topics or even files, serving as a way to link
     org-gnosis topics to current thema.

   Optionally, you can use also add tags for each note.

   Themata can have multiple hypotheses and answers (*depending on their
type*), separated by ‘gnosis-export-separator’, which defaults to
‘"\n-"’ _(a new line followed by a dash)_.

* Menu:

* Cloze::
* MCQ::


File: gnosis.info,  Node: Cloze,  Next: MCQ,  Up: Thema Types

3.1 Cloze
=========

A cloze note type is a format where you create sentences or paragraphs
with "missing" words.  A fill-in-the-blanks question.

   You can create a cloze note type using ‘M-x gnosis-add-thema’ and
selecting ‘Cloze’.

   Example format:

* Menu:

* Default cloze format::
* Using anki-like syntax::


File: gnosis.info,  Node: Default cloze format,  Next: Using anki-like syntax,  Up: Cloze

3.1.1 Default cloze format
--------------------------

     * Thema                      :pharmacology:antimicrobials:penicillin:
     :PROPERTIES:
     :GNOSIS_ID: NEW
     :GNOSIS_TYPE: cloze
     :END:
     ** Keimenon
     What is the treatment for Actinomyces infection?

     Penicillin

     ** Hypothesis
     - drug type

     ** Answer
     - Penicillin

     ** Parathema
     Sulfonamides → Nocardia
     Actinomyces → [[id:680ca944-8ee9-4513-92d6-25696ee01f48][Penicillin]]
     (treatment is a SNAP)


File: gnosis.info,  Node: Using anki-like syntax,  Prev: Default cloze format,  Up: Cloze

3.1.2 Using anki-like syntax
----------------------------

     * Thema                      :pharmacology:antimicrobials:penicillin:
     :PROPERTIES:
     :GNOSIS_ID: NEW
     :GNOSIS_TYPE: cloze
     :END:
     ** Keimenon
     {c1:Cyproheptadine::drug name} is a(n) {c2:5-HT2} receptor antagonist used to treat {c2:serotonin syndrome}

     ** Hypothesis
     -

     ** Answer
     -

     ** Parathema

   You can format clozes like Anki if you so prefer with hints; e.g
‘{{c1::Cyproheptadine::drug name}}’
   • You can use the keyword ‘::’ to indicate a hint.

   • 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.

        • If a cloze is repeated, such as in phrases with "acetyl" &
          acetylcholine, include whitespace in the cloze to denote a
          single word.


File: gnosis.info,  Node: MCQ,  Prev: Cloze,  Up: Thema Types

3.2 MCQ
=======

Example format:

     * Thema                                                            :clinical:
     :PROPERTIES:
     :GNOSIS_ID: NEW
     :GNOSIS_TYPE: mcq
     :END:
     ** Keimenon
     A 60-year-old man comes to the physician with chills, nausea, and
     diffuse muscle aches for 3 days. His niece had similar symptoms 2
     weeks ago and H3N2 influenza strain was isolated from her respiratory
     secretions. He received his influenza vaccination 2 months ago. His
     temperature is 38.5°C. A rapid influenza test is
     positive. Which of the following mechanisms best explains this
     patient's infection despite vaccination?

     ** Hypothesis
     - Random point mutations within viral genome
     - Complementing with functional viral proteins
     - Exchange of viral genes between chromosomes
     - Reassortment of viral RNA segments
     - Acquisition of viral surface proteins

     ** Answer
     - Random point mutations within viral genome

     ** Parathema
     Random point mutations within the viral genome are responsible for
     antigenic drift, which creates a new virus strain.


File: gnosis.info,  Node: Linking gnosis themata to org-gnosis content,  Next: Customization,  Prev: Thema Types,  Up: Top

4 Linking gnosis themata to org-gnosis content
**********************************************

   • You can create notes using ‘M-x org-gnosis-find’, to link them to a
     gnosis thema use ‘M-x org-gnosis-insert’ to insert a link of said
     topic, either on the keimenon or parathema.

   • You can review gnosis questions that are linked to a topic by using
     ‘M-x gnosis-review-topic’.


File: gnosis.info,  Node: Customization,  Next: Gnosis Algorithm,  Prev: Linking gnosis themata to org-gnosis content,  Up: Top

5 Customization
***************

* Menu:

* Typos | String Comparison::


File: gnosis.info,  Node: Typos | String Comparison,  Up: Customization

5.1 Typos | String Comparison
=============================

You can adjust ‘gnosis-string-difference’, this is a threshold value for
string comparison that determines the maximum acceptable Levenshtein
distance between two strings, which identifies their similarity

   Let's illustrate with an example:
     (setf gnosis-string-difference 1)

   In this scenario, we set ‘gnosis-string-difference’ to 1.  This
implies that two strings will be recognized as similar if they exhibit a
difference of at most one character edit.

   To demonstrate, 'example' and 'examples' will be recognized as
similar, considering that the latter involves just one additional
character."


File: gnosis.info,  Node: Gnosis Algorithm,  Next: Import & Export,  Prev: Customization,  Up: Top

6 Gnosis Algorithm
******************

Each gnosis note has a gnosis score, which is a list of 3 values,
(gnosis-plus gnosis-minus gnosis-synolon/total).  Gnosis-synolon is what
is used to determine the next interval upon a successful recall,
gnosis-plus is added to gnosis-synolon upon a successful recall as well,
gnosis-minus is subtracted from gnosis-synolon upon failing to recall a
note's answer.

   Gnosis has 2 special events, one is ‘anagnosis’ _ανάγνωση_ and
‘lethe’ _λήθη_.

* Menu:

* Anagnosis Event::
* Lethe event::
* Proto::


File: gnosis.info,  Node: Anagnosis Event,  Next: Lethe event,  Up: Gnosis Algorithm

6.1 Anagnosis Event
===================

‘Anagnosis’, which means comprehension & recognition of knowledge, is
triggered when the consecutive successful or failed recalls are equal or
greater to anagnosis value.

   When ‘anagnosis’ is triggered by consecutive *successful* recalls,
‘epignosis’ value is added to gnosis-plus.  _Epignosis means accuracy of
knowledge_.

   When ‘anagnosis’ is triggered by consecutive *failed* recalls,
‘agnoia’ value is added to gnosis-minus.  _Agnoia means lack of
knowledge_

   You can set specific values for each deck and tag of the variables
mentioned above by adjusting ‘gnosis-custom-values’.


File: gnosis.info,  Node: Lethe event,  Next: Proto,  Prev: Anagnosis Event,  Up: Gnosis Algorithm

6.2 Lethe event
===============

The ‘Lethe’ event triggers after a certain number of consecutive
failures to recall an answer correctly.

   When this threshold is reached, the next interval is reset to 0.

   For example, with lethe value of 2, upon having 2 consecutive failed
recalls the next review will be set for the current day.


File: gnosis.info,  Node: Proto,  Prev: Lethe event,  Up: Gnosis Algorithm

6.3 Proto
=========

The default initial interval is defined at ‘gnosis-algorithm-proto’, you
can define a custom initial interval for each deck as well.

   ‘gnosis-algorithm-interval’ is a list of numbers, representing the
first initial intervals for successful reviews.  There is no limit on
the length of the list.

   Example:

     (setq gnosis-algorithm-interval '(0 1 2 30))

   Upon each successful note review, the algorithm will increment to the
next interval value: 0 days (0), 1 day later (1), 2 days later (2), and
30 days later.

   Upon failing to review a note without completing it's proto
successful reviews, it's next review date will be on the same date.


File: gnosis.info,  Node: Import & Export,  Next: Editing themata,  Prev: Gnosis Algorithm,  Up: Top

7 Import & Export
*****************

* Menu:

* Exporting a deck::
* Importing a deck::


File: gnosis.info,  Node: Exporting a deck,  Next: Importing a deck,  Up: Import & Export

7.1 Exporting a deck
====================

Export a deck to an org file with ‘M-x gnosis-export-deck’, or from the
dashboard with ‘e’.

   You will be prompted for:
   • The deck to export
   • The output file path
   • Whether to keep current thema IDs (for updating) or replace with
     ‘NEW’ (for sharing)
   • Whether to include suspended themata

   The exported file includes a ‘#+DECK:’ header with the deck name and
a ‘#+THEMATA:’ header recording how many themata were exported.


File: gnosis.info,  Node: Importing a deck,  Prev: Exporting a deck,  Up: Import & Export

7.2 Importing a deck
====================

Import a deck from an org file with ‘M-x gnosis-import-deck’, or from
the dashboard with ‘i’.

   If a deck with the same name already exists, you will be asked to
confirm before importing into it.  Themata with matching IDs are updated
in place; themata with ‘NEW’ IDs are created as new entries.

   If any individual thema fails to import, the error is collected and
reported with its line number in the source file, while the remaining
themata are still imported.


File: gnosis.info,  Node: Editing themata,  Next: Sync between devices,  Prev: Import & Export,  Up: Top

8 Editing themata
*****************

   • Currently there are 2 ways for editing notes:

        • You can edit a note after review by pressing ‘e’
        • Open ‘gnosis-dashboard’ with ‘M-x gnosis-dashboard’, find the
          note you want to edit and press ‘e’


File: gnosis.info,  Node: Sync between devices,  Next: Interactions with other software,  Prev: Editing themata,  Up: Top

9 Sync between devices
**********************

Gnosis uses git to maintain data integrity and facilitate
synchronization across devices.

   You will need to configure your remote manually.

   Example:

     cd ~/.emacs.d/gnosis # default location for gnosis, no-littering is ~/.emacs.d/var/gnosis
     git init # After completing your first review session, a git repo should have been initialized automatically.
     git remote add origin <remote_url>
     git push --set-upstream origin master

   You can interactively use ‘gnosis-vc-push’ & ‘gnosis-vc-pull’.  As
the name suggests, they rely on ‘vc’ to work properly.

   Depending on your setup, ‘vc’ might require an external package for
the ssh passphrase dialog, such as ‘x11-ssh-askpass’.

   To automatically push changes after a review session, add this to
your configuration:
     (setf gnosis-vc-auto-push t)
     (gnosis-vc-pull) ;; Run vc-pull for gnosis on startup


File: gnosis.info,  Node: Interactions with other software,  Next: Contributing,  Prev: Sync between devices,  Up: Top

10 Interactions with other software
***********************************

* Menu:

* emacs-no-littering::


File: gnosis.info,  Node: emacs-no-littering,  Up: Interactions with other software

10.1 emacs-no-littering
=======================

If you are a user of emacs-no-littering
(https://github.com/emacscollective/no-littering), you can theme Gnosis
to fit its standards by adding the following snippet to your
configuration:

     (setq gnosis-dir (no-littering-expand-var-file-name "gnosis/"))

   This sets ‘gnosis-dir’ to ‘~/.emacs.d/var/gnosis’, in line with the
folders of other packages.


File: gnosis.info,  Node: Contributing,  Prev: Interactions with other software,  Up: Top

11 Contributing
***************

Thank you for considering contributing back to gnosis.  You can
contribute by submitting a pull request on the codeberg mirror
repository, or directly sending me patch via email.

* Menu:

* Patches Require Copyright Assignment To The FSF::
* How to create a patch::


File: gnosis.info,  Node: Patches Require Copyright Assignment To The FSF,  Next: How to create a patch,  Up: Contributing

11.1 Patches Require Copyright Assignment To The FSF
====================================================

For any major edit (more than 15 lines, or so, in aggregate per person),
you need to make a copyright assignment to the Free Software Foundation.
This is necessary as the FSF must at all times be in a position to
enforce the GNU General Public License.

   Here’s the process:

  1. Review and adapt the request form below.
  2. Email the specified address with your request.
  3. Await a legal agreement from the FSF.
  4. Sign and return the document, which can be done via email.

   The entire process usually takes about a week and needs to be
completed only once, allowing you to contribute to GNU Emacs.

     Please email the following information to assign@gnu.org, and we
     will send you the assignment form for your past and future changes.

     Please use your full legal name (in ASCII characters) as the subject
     line of the message.

     REQUEST: SEND FORM FOR PAST AND FUTURE CHANGES

     [Additional people we should notify about the progress of the assignment.]

     Thanos Apollo <public@thanosapollo.org>

     [What is the name of the program or package you're contributing to?]

     Emacs

     [Did you copy any files or text written by someone else in these changes?
     Even if that material is free software, we need to know about it.]


     [Do you have an employer who might have a basis to claim to own
     your changes?  Do you attend a school which might make such a claim?]


     [For the copyright registration, what country are you a citizen of?]


     [What year were you born?]


     [Please write your email address here.]


     [Please write your postal address here.]


     [Which files have you changed so far, and which new files have you written
     so far?]


File: gnosis.info,  Node: How to create a patch,  Prev: Patches Require Copyright Assignment To The FSF,  Up: Contributing

11.2 How to create a patch
==========================

_Example:_

     $ git clone https://git.thanosapollo.com/gnosis.git && cd gnosis
     $ emacs something
     $ git add something
     $ git commit -m "Fix something"
     $ git format-patch HEAD^1
     0001-Fix-something.patch

   You can sent the patch to "Thanos Apollo", the email of which you can
find on the git log.


Tag Table:
Node: Top201
Node: Introduction1728
Node: Getting started Tutorial3029
Node: Gnosis Dashboard3459
Node: Linking Themata to Note Topics4461
Node: Thema Types5509
Node: Cloze6485
Node: Default cloze format6876
Node: Using anki-like syntax7488
Node: MCQ8579
Node: Linking gnosis themata to org-gnosis content9784
Node: Customization10321
Node: Typos | String Comparison10525
Node: Gnosis Algorithm11281
Node: Anagnosis Event11946
Node: Lethe event12693
Node: Proto13137
Node: Import & Export13900
Node: Exporting a deck14093
Node: Importing a deck14704
Node: Editing themata15321
Node: Sync between devices15718
Node: Interactions with other software16796
Node: emacs-no-littering17024
Node: Contributing17526
Node: Patches Require Copyright Assignment To The FSF17920
Node: How to create a patch19878

End Tag Table


Local Variables:
coding: utf-8
Info-documentlanguage: en
End:
