Purpose
This skill scaffolds a new course directory with a properly structured
COURSE.md. It works for both curated courses (core/courses/ — community-
contributed, upstream-managed) and personal courses (custom/courses/ —
user-owned, never upstreamed). The output is a ready-to-edit COURSE.md
with structure in place — the author fills in the details, then learners
use /start-course to begin.
Upstack is domain-agnostic. The course being created could teach Go
programming, management accounting, network administration, project
management, or anything else that can be taught through productive
struggle.
Before You Start
Read these files — they must be in your context before continuing:
references/COURSE-SCHEMA.md — the full COURSE.md schema with
YAML frontmatter fields, markdown body structure, and formatting rules
core/courses/go-lang-for-developers/COURSE.md — the reference
course. Read this to calibrate what a well-structured COURSE.md looks
like: YAML frontmatter, assignment descriptions, suggested milestones,
design questions, paradigm shift flags, scope notes, topic checklists,
and reasoning review prompts. Match its register and depth when
generating the new course scaffold.
Procedure
Step 1 — Gather course details
Ask the author for the following. Suggest sensible defaults where
possible (e.g., derive slug from title).
- Course location — "Is this a curated course for the community
(
core/courses/) or a personal course (custom/courses/)?"
- Core: upstream-managed, community-contributed, reviewed.
Use for featured courses and catalogue content.
- Custom: user-owned, stays in the learner's fork, never
upstreamed. Use for personal learning goals.
- Course title — "What is this course called?"
- Slug — suggest a kebab-case slug from the title. Confirm with
the author.
- Domain — "What domain does this course belong to?" Offer:
- languages
- system-design
- architecture
- engineering-practices
- soft-skills
- domain-knowledge
- Target Dreyfus level — "Who is this course designed for?" Offer:
- Novice — no prior exposure to this subject
- Beginner — some exposure, can follow instructions
- Competent — can work independently on routine tasks
- Proficient — strong working knowledge, sees the big picture
- Expert — deep expertise, learning nuance and edge cases
- Target audience — "Describe the ideal learner in 1–2 sentences.
What background and prior knowledge should they have?"
- Modules and assignments — "How many modules? How many assignments
per module? Give me a brief title for each assignment."
- Prerequisites — "Does this course assume prior courses or
knowledge? If none, that's fine."
- Milestones — "For each assignment, what's the natural order of
work? What would you tackle first, second, third?" These become
suggested milestones in the COURSE.md.
- Design questions — "What decisions should the learner think
through before they start working? What trade-offs or structural/design
choices will they face?" These are posed by the tutor before
execution (see TUTOR-CONTRACT.md §10.3).
- Paradigm shifts — "Does the learner come from a different
paradigm? Which topics will conflict with their existing instincts?"
If yes, flag those topics with paradigm shift annotations.
- Scope boundaries — "Is there domain knowledge the learner needs
but isn't here to learn? (e.g., an API, a data format, a business
process)" If yes, add scope notes telling the tutor to scaffold
that knowledge so struggle stays focused on the course subject.
Move through the questions conversationally. If the author has a clear
vision, this can be quick. If they're exploring, help them think through
the structure. Items 9–12 can be deferred to a refinement pass if the
author wants to scaffold first and refine later.
Step 2 — Create directory structure
Create the course directory under the chosen location
(core/courses/ or custom/courses/):
<location>/<slug>/
├── COURSE.md
└── references/
└── .gitkeep
The course directory contains curriculum and reference material only.
Learner work lives in the learner's own separate workspace — each
assignment is a self-contained project, not a subdirectory of the course.
Step 3 — Generate COURSE.md
Populate using the schema from references/COURSE-SCHEMA.md:
- YAML frontmatter — fill all required fields from gathered inputs.
Set
created and updated to today's date. Set author from
profile/PROFILE.md if it exists, otherwise ask.
- Course description — write a brief summary from what the author
described. The author will refine it.
- What You Will Learn / Learning Objectives — generate placeholders
based on the assignment titles. Mark them as TODO for the author to
refine.
- Course Structure — create module headings, assignment headings,
suggested milestone placeholders, design question placeholders,
and topic placeholders (
- [ ] Topic — TODO: describe). Add
paradigm shift annotations if identified in Step 1. Add scope
notes if domain scaffolding boundaries were identified.
- Reasoning Review Prompts — add placeholder prompts per assignment.
These should be refined by the author before the course is used.
Step 4 — Confirm
Show the author a summary:
- Course title and slug
- Directory structure created
- Number of modules, assignments, and placeholder topics
Note that COURSE.md is a scaffold — the author should edit it to fill
in topic details, learning objectives, and reasoning review prompts
before running /start-course.
Step 5 — Commit
git add <location>/<slug> && git commit -m "course: scaffold <slug>"
Authoring Guidelines
- Assignments are projects, not exercises. Each assignment should
produce something meaningful — a system, a workflow, a model, an
analysis. "Build a REST API client" or "Create a quarterly budget
forecast" is an assignment. "Write a for loop" or "Add two cells"
is not.
- Topics are learnable concepts, not task steps. "Understand
goroutine scheduling" or "Master double-entry bookkeeping" are topics.
"Create a file" or "Run the tests" are tasks.
- Milestones are a suggested order, not rigid steps. Each milestone
names one thing to produce and one concept that emerges. The tutor
adapts them to the learner's pace. Milestones help the tutor sequence
the assignment and give the learner a sense of progression.
- Design questions drive struggle before execution. Pose decisions
the learner must resolve before starting work. Target trade-offs and
structural decisions, especially where prior instincts mislead.
- Paradigm shift flags help the tutor bridge. When the learner's
prior knowledge will actively conflict with a topic, flag it. The
tutor can then anticipate the conflict and apply bridging rather
than teaching from scratch.
- Scope notes separate learning from scaffolding. If an assignment
requires domain knowledge that isn't the course subject, tell the
tutor to help with it. The learner's struggle should stay on the
course topic, not on deciphering an API or a business rule.
- Reasoning review prompts test understanding, not recall. "Explain
why you chose this approach over the alternative" — not "What function
did you use?"
- Domain-agnostic language in the schema. The COURSE.md structure
works for any domain. Don't assume the course is about programming.
Reference
- COURSE.md schema and field reference:
references/COURSE-SCHEMA.md
- Tech spec §3: full schema specification with parsing rules
1---2name: create-course3description: Scaffold a new course directory from the COURSE.md schema. Creates the directory structure, populates COURSE.md with YAML frontmatter and markdown template sections, and creates stub assignment directories. Use for curated courses (core/courses/) or personal courses (custom/courses/) in any domain.4---56## Purpose78This skill scaffolds a new course directory with a properly structured9COURSE.md. It works for both curated courses (`core/courses/` — community-10contributed, upstream-managed) and personal courses (`custom/courses/` —11user-owned, never upstreamed). The output is a ready-to-edit COURSE.md12with structure in place — the author fills in the details, then learners13use `/start-course` to begin.1415Upstack is domain-agnostic. The course being created could teach Go16programming, management accounting, network administration, project17management, or anything else that can be taught through productive18struggle.1920---2122## Before You Start2324Read these files — they must be in your context before continuing:25261. `references/COURSE-SCHEMA.md` — the full COURSE.md schema with27 YAML frontmatter fields, markdown body structure, and formatting rules282. `core/courses/go-lang-for-developers/COURSE.md` — the reference29 course. Read this to calibrate what a well-structured COURSE.md looks30 like: YAML frontmatter, assignment descriptions, suggested milestones,31 design questions, paradigm shift flags, scope notes, topic checklists,32 and reasoning review prompts. Match its register and depth when33 generating the new course scaffold.3435---3637## Procedure3839### Step 1 — Gather course details4041Ask the author for the following. Suggest sensible defaults where42possible (e.g., derive slug from title).43441. **Course location** — "Is this a curated course for the community45 (`core/courses/`) or a personal course (`custom/courses/`)?"46 - **Core:** upstream-managed, community-contributed, reviewed.47 Use for featured courses and catalogue content.48 - **Custom:** user-owned, stays in the learner's fork, never49 upstreamed. Use for personal learning goals.502. **Course title** — "What is this course called?"513. **Slug** — suggest a kebab-case slug from the title. Confirm with52 the author.534. **Domain** — "What domain does this course belong to?" Offer:54 - languages55 - system-design56 - architecture57 - engineering-practices58 - soft-skills59 - domain-knowledge605. **Target Dreyfus level** — "Who is this course designed for?" Offer:61 - **Novice** — no prior exposure to this subject62 - **Beginner** — some exposure, can follow instructions63 - **Competent** — can work independently on routine tasks64 - **Proficient** — strong working knowledge, sees the big picture65 - **Expert** — deep expertise, learning nuance and edge cases666. **Target audience** — "Describe the ideal learner in 1–2 sentences.67 What background and prior knowledge should they have?"687. **Modules and assignments** — "How many modules? How many assignments69 per module? Give me a brief title for each assignment."708. **Prerequisites** — "Does this course assume prior courses or71 knowledge? If none, that's fine."729. **Milestones** — "For each assignment, what's the natural order of73 work? What would you tackle first, second, third?" These become74 suggested milestones in the COURSE.md.7510. **Design questions** — "What decisions should the learner think76 through before they start working? What trade-offs or structural/design77 choices will they face?" These are posed by the tutor before78 execution (see TUTOR-CONTRACT.md §10.3).7911. **Paradigm shifts** — "Does the learner come from a different80 paradigm? Which topics will conflict with their existing instincts?"81 If yes, flag those topics with paradigm shift annotations.8212. **Scope boundaries** — "Is there domain knowledge the learner needs83 but isn't here to learn? (e.g., an API, a data format, a business84 process)" If yes, add scope notes telling the tutor to scaffold85 that knowledge so struggle stays focused on the course subject.8687Move through the questions conversationally. If the author has a clear88vision, this can be quick. If they're exploring, help them think through89the structure. Items 9–12 can be deferred to a refinement pass if the90author wants to scaffold first and refine later.9192### Step 2 — Create directory structure9394Create the course directory under the chosen location95(`core/courses/` or `custom/courses/`):9697```98<location>/<slug>/99├── COURSE.md100└── references/101 └── .gitkeep102```103104The course directory contains curriculum and reference material only.105Learner work lives in the learner's own separate workspace — each106assignment is a self-contained project, not a subdirectory of the course.107108### Step 3 — Generate COURSE.md109110Populate using the schema from `references/COURSE-SCHEMA.md`:111112- **YAML frontmatter** — fill all required fields from gathered inputs.113 Set `created` and `updated` to today's date. Set `author` from114 `profile/PROFILE.md` if it exists, otherwise ask.115- **Course description** — write a brief summary from what the author116 described. The author will refine it.117- **What You Will Learn / Learning Objectives** — generate placeholders118 based on the assignment titles. Mark them as TODO for the author to119 refine.120- **Course Structure** — create module headings, assignment headings,121 suggested milestone placeholders, design question placeholders,122 and topic placeholders (`- [ ] Topic — TODO: describe`). Add123 paradigm shift annotations if identified in Step 1. Add scope124 notes if domain scaffolding boundaries were identified.125- **Reasoning Review Prompts** — add placeholder prompts per assignment.126 These should be refined by the author before the course is used.127128### Step 4 — Confirm129130Show the author a summary:131- Course title and slug132- Directory structure created133- Number of modules, assignments, and placeholder topics134135Note that COURSE.md is a scaffold — the author should edit it to fill136in topic details, learning objectives, and reasoning review prompts137before running `/start-course`.138139### Step 5 — Commit140141```142git add <location>/<slug> && git commit -m "course: scaffold <slug>"143```144145---146147## Authoring Guidelines148149- **Assignments are projects, not exercises.** Each assignment should150 produce something meaningful — a system, a workflow, a model, an151 analysis. "Build a REST API client" or "Create a quarterly budget152 forecast" is an assignment. "Write a for loop" or "Add two cells"153 is not.154- **Topics are learnable concepts, not task steps.** "Understand155 goroutine scheduling" or "Master double-entry bookkeeping" are topics.156 "Create a file" or "Run the tests" are tasks.157- **Milestones are a suggested order, not rigid steps.** Each milestone158 names one thing to produce and one concept that emerges. The tutor159 adapts them to the learner's pace. Milestones help the tutor sequence160 the assignment and give the learner a sense of progression.161- **Design questions drive struggle before execution.** Pose decisions162 the learner must resolve before starting work. Target trade-offs and163 structural decisions, especially where prior instincts mislead.164- **Paradigm shift flags help the tutor bridge.** When the learner's165 prior knowledge will actively conflict with a topic, flag it. The166 tutor can then anticipate the conflict and apply bridging rather167 than teaching from scratch.168- **Scope notes separate learning from scaffolding.** If an assignment169 requires domain knowledge that isn't the course subject, tell the170 tutor to help with it. The learner's struggle should stay on the171 course topic, not on deciphering an API or a business rule.172- **Reasoning review prompts test understanding, not recall.** "Explain173 why you chose this approach over the alternative" — not "What function174 did you use?"175- **Domain-agnostic language in the schema.** The COURSE.md structure176 works for any domain. Don't assume the course is about programming.177178---179180## Reference181182- COURSE.md schema and field reference: `references/COURSE-SCHEMA.md`183- Tech spec §3: full schema specification with parsing rules