← All extensions
Learn banner

Learn

ivyx

Follow a course lesson by lesson, with a tutor that asks instead of answering

Learn

The curriculum and the tutor. It keeps your courses, tracks what you have actually learned, and answers with a question instead of a patch. Lessons themselves are run by a lab extension — Notebook Lab today.

What you can do

  • Browse a course as modules and lessons, with your place kept between sessions
  • Work through a course you downloaded, or one you wrote yourself in a folder
  • Predict what a cell will print before the run button unlocks
  • Open hints one rung at a time, from a nudge down to an explained solution
  • Ask the tutor about a cell you are stuck on and get a question back
  • See which concepts you have mastered, which you are learning, and which you are stuck on
  • Find out when a cell gave the right answer for the wrong reason
  • Switch to teaching mode to write the hints, set the gates, and tag the concepts
  • Look at which concepts a whole class is stuck on

Requirements

  • A lab extension to run lessons. Notebook Lab covers *.lesson.ipynb.
  • Course Market, optionally, to download published courses. Without it you write your own lesson files, which is how every course starts anyway.
  • A connected model, for the tutor. Without one the lessons still work: the gates, the authored hints and the cells all run — only the conversation and the diagnosis go quiet.

How a lesson file is put together

A lesson is a standard .ipynb named *.lesson.ipynb. The pedagogy lives in metadata.ivyx, so the same file still opens as a plain notebook anywhere else.

Notebook level:

"ivyx": {
  "course": { "id": "gorunurluk-101", "title": "Görünürlük 101" },
  "module": { "id": "m3", "title": "Marka skoru", "order": 3 },
  "lesson": { "id": "l3", "title": "Marka görünürlük skoru", "order": 3 },
  "goal": "…",
  "lab": "kernel",
  "concepts": [{ "id": "sorting", "label": "Sıralama" }],
  "policy": { "solutionAfterAttempts": 2, "requirePredict": true }
}

Cell level:

"ivyx": {
  "role": "exercise",
  "concepts": ["sorting"],
  "predict": { "prompt": "Çıktı ne olur?", "check": "llm" },
  "gate": { "solutionAfterAttempts": 2 },
  "hints": [{ "level": "nudge", "text": "…" }],
  "diagnose": { "rationale": "…", "pitfalls": ["…"] }
}

Working examples are in examples/. The course tree is read from these fields directly — there is no separate manifest to keep in sync.

Every field, every default and the rules behind the gates are documented in docs/lesson-authoring.md.

Only this extension reads that format. A lab receives per-cell directives instead, which is what keeps the pedagogy from being implemented twice.

Settings

Gates are per lesson and per cell, not per install. Set them in teaching mode or in metadata.ivyx.policy.

Status

Progress is stored in .punica/learn/progress.json and belongs to whoever has the workspace open — there is no learner identity yet, so it is single-user.

The cohort view reads seeded data from .punica/learn/cohort-mock.json and labels itself as sample data. A real cohort service is the next phase; the view does not change when it arrives.

Hints and solutions live inside the lesson file, so a determined student can read them in a text editor. That is acceptable for classroom use and is the other thing the cohort service fixes.

Getting started

Open the Learn icon in the activity bar to see the courses in your workspace, then pick a lesson. The tutor panel is on the right. To write a lesson rather than take one, use the mode switch in the lesson header.