Source ingestion
prepareSource()
A file, a URL, a repo, or a bare concept. Every card cites the exact line it came from. What it can't verify, it holds back.
Source in. Honest, code-graded cards out. No UI included, build whatever sits on top.
Hand it a file, a URL, a repo, or a concept. Every card cites the line it came from, and the grade is computed by code checking your answer against that line, never a model deciding to be nice.
Everything else, chat, voice, a GUI, a CLI, is yours to build on top.
prepareSource()
A file, a URL, a repo, or a bare concept. Every card cites the exact line it came from. What it can't verify, it holds back.
grade_card()
Code checks the answer against the cited line, or an evidence-verified rubric for open recall. Never up to the model.
get_due_cards()
FSRS spaced repetition, computed by code. The right card is waiting when you come back.
await_user_response()
When it can't confidently grade an answer, it says so. Never a guessed rating, the turn stays retryable.
present_card() · reveal_answer()
No UI opinion shipped. Wire the primitives into a chat agent, a voice loop, a dashboard, whatever fits.
bunx @waits/recallit-tutor
A working example built on the same primitives, not the only way to use them. Try it in the browser, no key.
Files on disk, no accounts, no server. Everything below is the real CLI.