List and read Ed Lessons, mark them read, and show or submit answers to quiz slides.

Lessons

List lessons in a unit

edstem lessons UNIT defaults to list. Filters are case-insensitive and match exactly, except --module, which also accepts a substring of the module name. Passing a value that doesn’t match anything in the unit is a usage error that names the values that do exist, so you don’t have to guess:
If an unfiltered lessons list returns an empty array, that unit has no Ed Lessons at all — not a filtering problem.

Show and read a lesson

show returns the lesson and its slides as structured data. read renders the same lesson as Markdown and never changes anything on Ed.

Mark lessons as read

mark-read is a mutation. Every word you pass after <unit> must appear in the lesson’s title or its module name (case-insensitive, all words required) for that lesson to be selected. Selecting the whole unit needs --all explicitly — queries alone never match everything, so a typo in a query can’t silently mark nothing instead of what you meant, and an empty query list without --all is a usage error rather than a silent no-op. For each matching lesson, the CLI opens it, then walks its slides: a quiz slide is opened (recorded as viewed), and every other slide type is marked complete (recorded as completed). --delay <seconds> (default 0) waits between each slide update, useful if you’re marking a lot of lessons read and don’t want to hammer Ed. If a lesson fails partway through, the result for that lesson reports the error and marks it partial when at least one slide succeeded before the failure — lessons that succeeded earlier in the same run are unaffected.

Slides

Show a slide’s content, questions, responses, or quiz context

--section chooses what show returns:

Read a slide as Markdown

Renders the slide’s content as Markdown; never changes anything on Ed.

Submit a slide

Submitting is a two-step flow: save an answer for one question, then submit everything you’ve saved for the slide.
--question and --choice come as a pair: --choice without --question and --question without at least one --choice are both usage errors, and so is --amend without --question. Call slides submit <slide> with no --question to submit every answer you’ve saved for that slide — that’s the call that finalizes the quiz slide.

Download lesson files

PDF slides and Ed-hosted attachments.