Karam Guliyev28 downloadsAI exam prep from your notes: practice questions for any certification or test (PMP, CSM, AWS, CompTIA, university). Mistakes re-quizzed.
An Obsidian plugin. It quizzes you on a note, a selection, several notes or a folder, in exam style. It also re-quizzes your errors with new versions until you master them.
data.json and history.json) to any vault.KaramGuliyev/CertFS.main.js, manifest.json, styles.css from the latest release into <vault>/.obsidian/plugins/certfs-quiz/ → restart Obsidian → enable CertFS Quiz.:free.| Do this | How |
|---|---|
| 📖 Quiz the open note | 🧠 ribbon icon, or Ctrl+P → Quiz this note |
| ✂️ Quiz part of a note | Select text → Ctrl+P → Quiz selected text |
| ⚙️ Pick settings | Count (1–15), difficulty, optional focus, question types |
| 🚀 Start | Generate |
| 📚 Quiz several notes | Ctrl+P → Quiz multiple notes → search + tick notes, or select notes in the file explorer (Ctrl/Cmd+click) → right-click → CertFS Quiz: quiz N notes |
| 📁 Quiz a whole folder | Ctrl+P → Quiz a folder → pick it |
| 🔁 Re-quiz errors | ↺ ribbon icon, or Ctrl+P → Quiz my errors |
| 📦 Test the archive | Ctrl+P → Test my archive |
Folder quiz:
Errors/, Archive/, Mocks/ and files starting with _ (Settings: Folder quiz skips).Multiple notes quiz:
In the quiz:
At the end:
| Type | What you do |
|---|---|
| 🔘 Multiple choice | Pick 1 of 4 |
| 🎭 Scenario | A situation → pick the best action (1 of 4) |
| ☑️ Multi-select | Pick all correct options (exact set) |
| ⚖️ True / False | Pick one |
| ✍️ Short answer | Type it. The AI grades the idea, not the wording |
| 🔗 Matching | Match each term to its pair |
| Subject setting | Used for |
|---|---|
| Name | exam: in error notes, the subject dropdown, stats |
| Folder | Which notes belong to it; errors go to <folder>/Errors/ |
| Rules note | **Rule:** → [[...]] line in error notes (empty = no line) |
| Question style | Optional. Empty → the AI guesses the exam from name + folder. Fill it to steer wording, traps, scenario type |
Presets (default folders, edit them in Settings):
| Folder | Style | Rules link |
|---|---|---|
1 CSM/ |
CSM (Scrum Guide 2020) | Scrum Rules |
2 PMP/ |
PMP (PMI mindset) | Mindset Rules |
3 CPMAI/ |
CPMAI | CPMAI Rules |
<subject folder>/Errors/YYYY-MM-DD <topic>.md.Errors and Archive names can be changed in Settings (old notes are not moved).99 Templates/Error.md.source: "CertFS Quiz (<note>)", status: new, next_review = tomorrow.| Answer | What happens |
|---|---|
| ✅ Right, error was due | streak +1 → next check in 3 days, then 7 days (Settings: Days between checks) |
| ✅ Right, not due yet | ⚠️ Warning. Default: logged, not counted. Or Count anyway (+1), or red Skip → archive (asks twice) |
✅ 3rd right (streak: 3) |
status: mastered, moved to Errors/Archive/ (Settings: Correct answers to master, 1–10) |
| ❌ Wrong | streak: 0, status: new, again tomorrow |
Test my archive:
Errors/, streak: 0, again tomorrow.history.json in this folder.<subject folder>/Stats.md is rewritten when a quiz ends: score, last 7 days, errors due/active/archived, weakest topics, by quiz type.| Message says | Fix |
|---|---|
| Add your API key | Paste the key in Settings |
| Pick a model | Load free models → pick a :free one |
| 401 | Key is wrong or deleted → make a new key |
| 402 | Model isn't free → pick a :free model. Key's credit limit must be empty, not $0 |
| 404 | Model is gone → Load free models again |
| 429 | Free model busy upstream → pick another :free model. Or your limit → wait 1 min / tomorrow |
| Did not answer in 90 s | Free model stuck → try again, or pick another :free model |
| Response cut off | Ask for fewer questions |
| No usable questions | Try again, or pick another free model |
| Note too short | Note needs 80+ characters |
Network requests (only 2, both to openrouter.ai):
POST https://openrouter.ai/api/v1/chat/completions: generates and grades questions. Sent only when you start a quiz (or press Check on a short answer / matching). Carries the note text, your settings for the quiz and your API key.GET https://openrouter.ai/api/v1/models: lists free models when you press Load free models in Settings. No note text.Vault access:
getMarkdownFiles) is read only on your device: to find the notes of a folder quiz, to show the note picker in Quiz multiple notes, to find error notes, and for the folder / note search in Settings. File paths are never sent anywhere.Stats.md) and history.json in the plugin folder.Data:
data.json in this folder, unencrypted.data.json and history.json are gitignored, so they never go to GitHub.0.3.5
main.js, manifest.json, styles.css.CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, ACCESSIBILITY.md, issue and PR templates.0.3.4
0.3.3
0.3.2
0.3.1
0.3.0: generic and shareable
history.json. A new quiz skips the note's last 40 questions.<subject>/Stats.md is rewritten after each quiz.0.2.x
0.1
main.js (CommonJS), manifest.json, styles.css.https://openrouter.ai/api/v1/chat/completions via Obsidian requestUrl.response_format: json_object). On 400 it retries without it.module.exports._test for unit tests.data.json (subjects: [{name, folder, rules, style}]). Presets are in PRESET_SUBJECTS.