Start course
An open-source framework that configures AI as a genuine tutor — not an answer machine.
npx -y skills add ishands/upstack --skill start-courseAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Initialise a learning session. Checks for an existing journal in progress/<course-slug>/journal.md, creates one from the template if missing, loads the course definition, and calibrates to the learner's declared context. Use when starting a new course or resuming after a break.
SKILL.md
7.8 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it
Purpose
This skill sets up a learning session. It handles two scenarios:
- New course — creates the journal and learner context, calibrates the tutor, and orients the learner on what's ahead.
- Resuming — loads existing progress, recalibrates, and picks up where the learner left off.
The skill ensures the tutor never starts cold. By the time the learner begins working, the tutor knows who they are, what course they're taking, and where they are in it.
Before You Start
Read these files — they must be in your context before continuing:
references/JOURNAL-TEMPLATE.md— journal scaffold with placeholders and scribe instructionsreferences/LEARNER-CONTEXT.md— measurement checklist for the learner context interview, output format, and interview tips
Procedure
Step 1 — Identify the course
Scan core/courses/ and custom/courses/ for directories containing
a COURSE.md file. Each is an available course.
- One course found — use it automatically. Confirm with the learner: "I found [title]. Starting that one?"
- Multiple courses found — list them by title and slug. Ask the learner which one they want to start.
- No courses found — tell the learner there are no courses
available and suggest using
/create-courseto scaffold one.
Step 2 — Read the course definition
Read the selected COURSE.md. Extract:
- Course title, slug, and domain
- Target Dreyfus level and target audience
- Course Structure section — modules and assignments (titles, descriptions, topic checklists)
- Reasoning Review Prompts per assignment
- Prerequisites (if any)
If the course has prerequisites, check whether the learner has
completed them (look in progress/ for completed journals). Warn
if prerequisites are unmet — but don't block. The learner decides.
Step 3 — Create or load the journal
Check if progress/<slug>/journal.md exists.
If it does not exist (new course):
Create the journal from references/JOURNAL-TEMPLATE.md:
- Copy the template content below the
<!-- JOURNAL START -->marker - Replace placeholders:
{course-title}— from COURSE.md title{learner-name}— fromprofile/PROFILE.mdif it exists, otherwise ask the learner{start-date}— today's date (YYYY-MM-DD){progress-tracker}— generate from COURSE.md assignments:- [ ] **Assignment 1: Title** - [ ] **Assignment 2: Title**{assignment-sections}— generate one section per assignment using the Per-Assignment Section Structure from the template:## Assignment N: Title **Goal:** {from COURSE.md assignment description} ### What I Attempted ### Mistakes and Corrections ### Got It Right ### What Clicked
- Write to
progress/<slug>/journal.md. Create theprogress/<slug>/directory if it does not exist.
If it does exist (resuming):
Read the existing journal. Note which assignments are completed (checked in the Progress Tracker) and which is next.
Step 4 — Create or load the learner context
Check if progress/<slug>/learner-context.md exists.
If it does not exist (new course):
Interview the learner using references/LEARNER-CONTEXT.md as the
measurement checklist. Walk through all 6 fields conversationally:
- Prior Skills Relevant to This Course
- Mental Models Being Brought In
- Level in This Subject (offer the Dreyfus scale)
- Prior Exposure to This Subject
- Learning Preferences
- Prior Upstack Courses Completed
Before asking, read the course's target audience and target Dreyfus level from COURSE.md — the garment spec tells you what body type this garment is designed for. Use it to ask better questions.
If profile/PROFILE.md exists, read it first. Some answers may
already be covered by the profile — acknowledge what you already know
and probe for course-specific details rather than re-asking generics.
Write the answers to progress/<slug>/learner-context.md using the
output format defined in the template.
If it does exist (resuming):
Read the existing learner context. Do not re-interview.
Step 5 — Commit progress files
If new files were created in Steps 3–4:
git add progress/<slug>/ && git commit -m "progress: start <slug>"
If resuming with no new files, skip this step.
Step 6 — Update AGENTS-CUSTOM.md Active Course section
Read the root AGENTS-CUSTOM.md file. Find the <!-- start-course -->
comment. Replace everything from that comment up to (and including) the
--- separator that follows the Active Course content with:
<!-- start-course -->
## Active Course
**Course:** {title}
**Slug:** {slug}
**Path:** {core/courses or custom/courses}/{slug}/COURSE.md
**Journal:** progress/{slug}/journal.md
**Learner Context:** progress/{slug}/learner-context.md
---
This ensures the tutor has the active course in context on every session load without needing to re-run the skill.
Step 7 — Calibrate
Read calibration sources in this order:
profile/PROFILE.md(if it exists) — the learner's full background across all courses. See.agents/skills/core/configure-profile/references/PROFILE-TEMPLATE.md§"How the Tutor Reads the Profile" for per-section guidance.progress/<slug>/learner-context.md— course-specific context. How this learner's background applies to this particular course.
Profile first (who you are), then context (how your background applies here). Together they tell you:
- What analogies will land (prior skills + mental models)
- What level to pitch at (Dreyfus level in this subject)
- What transfer errors to watch for (mental models from other domains)
- How to interact (learning preferences)
Step 8 — Summarise and orient
Present the learner with a brief summary:
For a new course:
- Course title and what it covers (1–2 sentences from COURSE.md)
- Number of assignments and their titles
- Where to begin (Assignment 1)
- A note that the journal will be maintained automatically
For a resuming learner:
- Where they left off (last completed assignment, or current in-progress assignment)
- What's next
- Any relevant context from the journal (last session's key takeaways, if available)
End with an invitation to begin: "Ready to start Assignment 1?" or "Ready to pick up where you left off?"
Notes
- The learner context interview is a conversation, not a form.
Ask one question at a time, respond to the answer, then move on.
See
references/LEARNER-CONTEXT.md§Tips for the Tutor During Measurement for guidance on probing, overstatement/understatement, and using the conversation itself as calibration data. - Don't block on missing profile. If
profile/PROFILE.mddoes not exist, the learner context alone is sufficient for calibration. Suggest running/configure-profilelater for richer calibration across future courses, but don't require it. - Commit before the interview, not after. If the journal is created but the learner context interview hasn't started yet, don't commit. Wait until both files exist (or just the journal, if resuming and context already exists), then commit once.
Reference
- Journal template and scribe instructions:
references/JOURNAL-TEMPLATE.md - Learner context measurement checklist:
references/LEARNER-CONTEXT.md - Profile reading guidance:
.agents/skills/core/configure-profile/references/PROFILE-TEMPLATE.md - Tech spec §6.3.1: full skill specification
Gives 0 of the 12 instructions most learn study skills give in ~1.8k tokens
Counted across 546 of the 573 authors here whose files we hold, read 2026-08-06
- produce self-contained HTML lessonsin 24 of 546, across 8 files
- record user preferences in a notes filein 23 of 546, across 5 files
- calculate the zone of proximal development before teachingin 23 of 546, across 6 files
- maintain a teaching workspace in the current directoryin 21 of 546, across 4 files
- make lessons beautiful, short, and quickly completablein 19 of 546, across 3 files
- create reusable components for lessonsin 19 of 546, across 5 files
- create compressed reference documents for quick lookupin 19 of 546, across 3 files
- find high-quality resources before writing lessonsin 18 of 546, across 4 files
- update the mission file and records upon mission changesin 16 of 546, across 2 files
- set min_dist to 0.0 for clustering preprocessingin 16 of 546, across 6 files
- populate the mission file before teachingin 15 of 546, across 1 file
- include interactive feedback loops in lessonsin 15 of 546, across 1 file
Said here and by no other author read
- read template and context reference files first
- scan directories for available courses
- read the selected course definition file
- create journal from template if it does not exist
- replace placeholders in generated journal files
- interview learner to gather course-specific context
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.