Edit a lesson.
Pencil icon next to a lesson.
From /teacher/courses, select a course, scroll to the Lessons block. Each lesson row has a small pencil icon on the right (between the title area and the trash). Click it. The lesson editor opens as a modal with every field populated from the current lesson values.
Click Save at the bottom to commit. Cancel or close to discard.
Student-facing copy.
Title
1–200 characters. Shown in the lesson list, navigation, and at the top of the lesson session. Keep it concrete: “Loop your alphabet” is better than “Iteration with type.”
Description
Up to 2000 characters. One- or two-sentence summary shown in course listings and the student’s lesson card. Optional but strongly recommended — students scan the list before clicking in.
The code engine.
Three values: p5js, threejs, glsl. Affects only code-mode lessons. The studio passes this as the codeFramework to the code-generation tool, so:
p5js— the AI generates p5.js sketches that run in the studio’s p5 renderer. Best for 2D, immediate feedback, beginner-friendly.threejs— three.js sketches with WebGL. Best for 3D, intermediate JS comfort.glsl— fragment/vertex shaders. Advanced, no entry point for beginners.
If the lesson’s mediaTypes doesn’t include code, this field still has to be set (the column is NOT NULL) but it doesn’t affect runtime behavior. Pick whatever; p5js is a fine default.
2–4 specific outcomes.
A list of 2–4 specific, observable outcomes the student should be able to do by the end of the lesson. The editor accepts one goal per line. The studio joins them as a JSON array.
Goals are read by the tutor as part of the lesson context — the tutor uses them to nudge the conversation back on-arc when the student strays. They’re also used by the scoring system at lesson-end to assess mastery.
What works: “Use a for-loop to draw 100 letters with random positions” is a real, observable outcome. What doesn’t: “Understand iteration” is too vague — the tutor can’t tell if the student got there.
What the student sees first.
Up to 2000 characters. The first message the student sees when they enter the lesson — pre-written by the tutor as a system-generated assistant message. If empty, the studio uses a default: “Welcome to ‘[Title]’. Tell me what you’d like to create and we’ll build it together.”
Custom opening prompts are usually 2–4 sentences:
- A warm welcome and the lesson’s creative outcome.
- The first concrete thing to try (specific, low-friction).
- An invitation to ask if stuck.
Example: “Welcome to Loop Your Alphabet. By the end you’ll have a sketch that draws all 26 letters in a grid using a for-loop. To start, tell me which letter you want to play with first — I’ll set up the canvas. Ask anything along the way.”
Hidden steering for the AI.
Up to 10,000 characters. Not shown to the student. Read by the tutor as part of the system prompt. Use it to encode all the things you’d tell a TA about how to handle this lesson:
- What concepts to introduce in what order.
- Common student misconceptions and how to redirect.
- What hints to give vs. what to let the student wrestle with.
- Vocabulary to use or avoid.
- How to grade — what mastery looks like for this lesson specifically.
- References, examples, or external links the tutor can mention.
Tutor notes are the highest-leverage field on this form. A weak set of tutor notes makes the AI tutor feel generic; a rich set makes it feel like a knowledgeable instructor specific to this lesson.
Locks the chat to specific tools.
Five chips: Image, Video, 3D, Code, App Lab. Click to toggle. Empty = unrestricted (any tool allowed). Non-empty = the student can only use tools matching the selected chips.
Covered in detail in 07 / Lesson media types — read it once if you haven’t. Default is what you set at the course wizard level; per-lesson chips override.
Pass threshold, time, scoring, token budget.
Four fields are technically per-lesson but most courses set them at the course level and forget — they’re inherited from course defaults at lesson creation time:
- Pass threshold (0–100) — mastery score needed to advance. Default 80.
- Max time seconds (0–14400) — per-lesson timer. 0 = unlimited. Default 0.
- Scoring enabled (boolean) — whether the lesson is scored at all. Default true.
- Token budget (positive int) — soft cap on total chat tokens for the session. Default 10,000. Affects the engagement-score calculation.
Override at the lesson level only when a specific lesson genuinely needs different behavior — e.g. a 90-minute capstone in a course where every other lesson is 30 minutes.
Atomic, immediate.
Click Save and the studio writes every changed field in a single UPDATE. The lesson row updates atomically. New fields are visible immediately on the lesson list and to any student who hasn’t entered the lesson yet.
Students who are already in a lesson session keep the old values for the duration of that session — the tutor caches the lesson context at session start and doesn’t re-read mid-session. New sessions get the new values. This is a deliberate consistency choice; otherwise mid-edit changes would surprise students.
The chat-based authoring flow.
If you’d rather have the AI propose lessons in a chat than fill out this form by hand, see 09 / Author lessons with AI.