Installation
User guide
Exam protocol
Offline mode
Getting a program from an LLM, the screens, the exam, notes and encryption, the Obsidian plugin and Markdown export.
core/assets/generate-roadmap.md produces the skeleton of a program, and
core/assets/generate-topic.md produces a single topic file. Paste the first one into any
LLM chat, write below it what you want to learn, take the resulting roadmap.yaml and
progress.yaml, then use the second prompt to build the topics one by one. The result is a
bundle — a folder with roadmap.yaml, topics/*.yaml and examiner.md. There is a ready
example in the repository under examples/llm-agents-base. There is no “copy the prompt”
button in the interface yet.| Screen | What for |
|---|---|
| Program | every topic by stage, statuses, entry point into a topic |
| Topic | materials, practice, questions, note |
| Practice | timer for the topic’s timebox, survives a restart |
| Exam | questions, answers and the verdict |
| Queue | what to do now: available topics and reviews that came due |
| Review | topics whose revalidation date has arrived |
| Stale | topics that changed after the program was regenerated |
| Graph | topic dependencies by layer |
| Notes · Search | all notes and search across them |
| Statistics | hours, statuses, history |
| Settings | language, LLM provider, notes, encryption, offline, history |
Two paths, both yours:
The verdict is written into your program’s progress.yaml. Nothing else in the bundle is ever
written to. What the model has to return, and what each verdict does to a topic’s status, is in
the exam protocol.
A topic note is a plain .md file with a tolearn: roadmap/topic frontmatter. By default
notes live in the app’s data directory, but settings let you point at your own vault — an
Obsidian folder, for instance: edits made outside are then picked up.
Encryption (Settings → “Encryption”) covers the internal directory: the files become unreadable from outside and the file names give away nothing. The price is stated right on that screen — an external editor, picking up outside edits and the Obsidian plugin all stop working, and losing both the passphrase and the device key means losing the notes. External storage is never encrypted.
A topic’s materials are downloaded once and saved whole, as a single HTML file. After that the network is not needed: the reader shows the text from the archive. Nothing but an explicitly requested download ever goes online — details in Offline mode.
It shows the program, the status of the open topic and a “time to review” mark in the status bar, and opens a topic in the app on command. It never writes anything. Point it at the app’s data directory in the plugin settings. The status it shows is the recorded one — blocking and staleness are recomputed by the app, so the precise answer is always there. With encryption on the plugin sees no statuses and says so.
The “Export to Markdown” button on the program screen collects the whole program into one file — table of contents, topics, notes. Answers and traps make it into the file only for topics that were passed. The export never writes inside the bundle itself.