I kept running into the same problem while learning: I'd jump into an advanced topic, realise I was missing prerequisites, then forget the basics I'd just learned.
Flashcard apps didn't understand dependencies. Note apps didn't schedule reviews. Then I stumbled upon this open-source CLI and it's the first tool that seems to get both problems at once.
It's called PALEE — Personal Active Learning & Evaluation Engine. It lives inside your Obsidian vault and tells you what to study next.
GitHub: https://github.com/Kuldeep2822k/cli
What it does
Your vault is the database. No separate DB, no sync headaches. Study state lives in frontmatter:
--- palee_schema: 1 palee_id: T-docker-volumes title: "Docker Volumes" depends_on: - T-docker-basics topic_mastery: 0.725 ease_factor: 2.36 interval_days: 6 due_at: 2026-01-21 --- Then:
npm install -g @kuldeep2822k/palee palee config set-vault ~/Documents/Obsidian/Learning palee adopt "Docker Fundamentals.md" palee next # → Learn: Pod Lifecycle in Kubernetes palee progress # → overall mastery, repetitions, what's due Three ideas make it work:
1. Deterministic core
SM-2 spaced repetition + a DAG for dependencies. When it says "study this next," you can trace why — what's due, what it unlocks, what depends on it. The optional AI tutor (any OpenAI-compatible endpoint) only does Feynman-style testing; it isn't the scheduler.
2. Dependency-aware, not just due-date aware
Never study something before its prerequisites. Roadmap imports are validated as a DAG, offline, no network needed.
3. Session continuity
Every session is saved as an Obsidian note, plus a compact hot-memory file. Next time you run palee session start, it resumes where you left off.
The bit that sold me: --auto-chain + wikilinks
palee adopt --auto-chain palee roadmap --auto-chain It resolves [[wikilinks]] in your notes into real dependencies. Write naturally in Obsidian, get a proper learning graph for free.
Apparently this was trickier than it sounds:
- Independent
## Tracksections kept getting merged into one mega-chain — fixed by scoping chaining per-track - Nested folders sorted wrong (
01-foundations/03-extrasvs02-linux) — fixed by comparing full path segments - Had to make sure
[[diagram.png]]never gets frontmatter written into it
Under the hood
- TypeScript + Node 22, Commander for the CLI, YAML frontmatter for storage
- Hand-rolled SM-2 + DAG engine (no black box)
- Atomic writes + file locking, so it survives concurrent Obsidian edits, on Windows and Unix paths
- 982 tests across 161 suites — including fuzz, fault-injection, and timezone tests, because spaced repetition across timezones is sneaky
Docs: https://kuldeep2822k.github.io/cli/
Try it
npm install -g @kuldeep2822k/palee It's MIT-licensed. If you use Obsidian for learning, run palee next on your vault and see if the recommendation makes sense. And if it does, a star on GitHub helps small projects like this get discovered: https://github.com/Kuldeep2822k/cli
What are you using to track learning right now? Curious what's worked for you.

