# Recall Desk > What to review on which day, and the cards to drill it: paste a topic list or notes and an exam date, and the browser builds a spaced-repetition review calendar with FSRS-6, the daily workload against the minutes you have, three phases (learn, review, rehearse) and a forgetting-curve forecast of recall on exam day and a month later for the spaced plan, a crammed plan and no reviews at all, for free; then a learning coach writes the plan with a retrieval method for every unit, or writes flashcards from your notes with every answer checked against them. Live at https://recall-desk.skillsafe.ai/ · API tutorial at https://recall-desk.skillsafe.ai/api.html · Tokens at https://recall-desk.skillsafe.ai/tokens.html ## What it does One work object: what a student has to learn for one exam or deadline. The material is one unit per line, or Markdown headings with notes under each; a start date, an exam date, the minutes a day the student can give, the days of the week they study, minutes per new unit and per review, a target retention (85, 90 or 95 percent), whether the material is new or familiar, and whether every unit gets a final pass before the exam. The free engine (no account, no model): FSRS-6, the Free Spaced Repetition Scheduler by Open Spaced Repetition (MIT), with its published default parameters. Each unit is a memory with a stability and a difficulty; a review is placed when the predicted probability of recall would fall to the target, snapped to the next study day; every review is assumed remembered. Phases follow the memory-retrieval-learning skill's exam pattern: sixty percent of study days to meet the material, thirty to review, ten to rehearse. Output: the calendar (minutes per day, new units and reviews per day), per-unit review dates and exam-day recall, totals (sessions, minutes, hours, heaviest day, days over budget), a fit verdict (fits, tight, does not fit), the forecast (mean and minimum recall on exam day, recall thirty days later, the same figures for cramming the last days with the same engine and for meeting each unit once with no reviews, and recall if the final pass is skipped), and exports as CSV and .ics. The cards engine parses Q:/A: pairs, tab-separated fronts and backs and {{c1::cloze}} lines, lints them against the minimum-information rules (one fact per card, a real question, no list answers, no cloze that hides the whole sentence, no duplicate fronts), checks every answer against the notes word by word and number by number, and exports Anki-importable TSV for basic and cloze note types. Two metered lanes (gpt-terra, one system prompt with a task router): - `plan` - the study plan: a verdict equal to the engine's fit (fits, tight, does_not_fit, or rework_goal when the goal is unusable), the plan in prose built only from the computed figures, a goal check with the success criterion, one row per unit with its kind (facts, procedure, concept, mixed) and its retrieval method (flashcards, worked problems, free recall, explain it aloud, practice test), a reading of the phases and the workload, a reading of the forecast, interleaving advice, nine named study pitfalls each judged, and a tracking rule. - `cards` - the deck: exactly the number of cards asked for (or fewer with a thin_notes verdict), basic and/or cloze, one fact per card, tags and optional mnemonics, a coverage note, a review of the student's own cards, and a drilling tip. Handoffs: "Write the cards for this unit" carries a unit and its notes from the plan into the cards lane; "Back to the plan with these cards" sets the review minutes from the deck's size. Every number the model writes is read back against the engine; every card answer is checked against the notes; disagreements are shown. ## The contract Run body: `{ "task": "plan" | "cards", "goal": string, "material": string (plan), "unit": string (cards), "notes": string (cards), "style": "basic" | "cloze" | "mixed" (cards), "want": integer (cards), "own_cards": string (cards, optional), "facts": string }` where `facts` is the JSON the browser engine computed (`SRS.plan` through `Recon.planFacts` for the plan lane; `Recon.cardsFacts` for the cards lane). The reply is one JSON object with `lane`, `title`, `headline`, `verdict`, `summary`, `notes_on_input`, `risks`, `next_steps` and the lane body (`plan_statement`, `goal_check`, `units`, `phase_reading`, `forecast_reading`, `interleaving`, `pitfalls`, `tracking` for plan; `cards`, `coverage`, `own_cards_review`, `study_tip` for cards). ## Sources Derived from two agent skills: @lyndonkl/memory-retrieval-learning (https://skillsafe.ai/skill/@lyndonkl/memory-retrieval-learning/, github.com/lyndonkl/claude) for the plan lane and @szeyu/flashcard-creator (https://skillsafe.ai/skill/@szeyu/flashcard-creator/, szeyu/vibe-study-skills, Apache-2.0) for the cards lane. Scheduling: FSRS-6 by Open Spaced Repetition (MIT), written from the published algorithm page. The engine was verified against the reference implementation py-fsrs 6.3.2 on 75,659 stability, difficulty, interval and retrievability checks (worst relative disagreement 7e-15) with three controls that must and do fail (FSRS-4.5 curve constants, an SM-2 ease factor, a sign-flipped decay), and the planner was re-simulated independently in Python on 437 checks with two controls that must and do fail (no final pass, no rest-day snapping). Evidence base for the methods: Ebbinghaus (1885); Cepeda et al. (2006) on spacing; Roediger and Karpicke (2006) on the testing effect; Rohrer and Taylor (2007) on interleaving; Wozniak's minimum-information principle. Licence texts shipped with the app: https://recall-desk.skillsafe.ai/LICENSE-SZEYU-VIBE-STUDY-SKILLS.txt (Apache-2.0, szeyu/vibe-study-skills) and https://recall-desk.skillsafe.ai/LICENSE-FSRS.txt (MIT, Open Spaced Repetition, whose default FSRS-6 parameters the engine uses). The lyndonkl/claude repository declares no licence; it is credited as the source of the plan lane's method. Not a substitute for a teacher; not affiliated with the skills' authors or with Open Spaced Repetition.