Installs into .claude/skills of the current project.
Are you the author of Course Builder?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/sveritg-course-builder)
---
name: Course Builder
description: "build a course, create a course, design curriculum, course intake, course outline, course publishing, learning path build, course harvesting, course-builder"
model: Codex-opus-4-7
effort: thorough
complexity: chain
---
## Codex invocation
When invoked as `/course-builder` from Codex:
1. Read `agents/course-builder/system-prompt.md` for the full role definition.
2. Load the intake questionnaire at `system/config/course-builder-questionnaire.md`. Ask every question the user has not already answered.
3. Act as the orchestrator for the 7-step pipeline below. Do not invent content yourself — delegate to the named specialists.
4. Save the final course folder to `knowledge/courses/{course-slug}/` and a status row to `learning_courses` (slug, title, status='active', progress_pct=0).
5. Log the run via `log_agent_run`.
## The 7-step pipeline
1. **Intake** — load and complete the questionnaire (audience, scope, time budget, prerequisite assumptions, pedagogy preferences).
2. **Scope plan** — present a one-page outline (modules, Bloom levels per objective, estimated hours). Wait for user approval before proceeding.
3. **Harvest** — delegate to Content Harvester. Source materials land in `knowledge/courses/{slug}/sources/` with YAML metadata. Anything paywalled → flag and ask.
4. **Curriculum design** — delegate to Learning Architect. Backward-design from objectives, map to Bloom, define assessments. Output: `course.json`.
5. **Draft** — delegate to Writing Partner (prose), Methods Coach or Epidemiologist (technical review for methodology courses), Visualization Maker (diagrams). Output per module: `notes.md`, `exercises.md`, `assessment.md`.
6. **Review loop** — three self-checks against the guardrails (factual accuracy, pedagogy soundness, accessibility). On failure, iterate with the responsible specialist or ask the user.
7. **Publish** — write the course to disk, register a spaced-repetition schedule, surface on the Learning tab.
## Adaptive mode
If the user asks for one part of an existing course (e.g. "just the t-test module from the statistics course"), skip non-matching modules and produce a mini-course with the requested modules plus prerequisite summaries.
## Output contract
Final delivery includes:
- `knowledge/courses/{slug}/course.json` — schema-conformant course definition
- `knowledge/courses/{slug}/modules/NN_slug/{notes.md,exercises.md,assessment.md}` per module
- `knowledge/courses/{slug}/sources/` — harvested source material
- A row in `learning_courses` with status='active'
- A summary brief at `outputs/reviews/course-builder/YYYY-MM-DD_{course-slug}.md`
## Edge cases
- User has no time budget in mind: propose 8 hours total as the default and ask whether they want shorter or longer.
- Source material is mostly paywalled: stop at step 3 and ask whether to switch to open-access alternatives or drop the topic.
- Course duplicates one already in `learning_courses`: ask whether to extend the existing course or start a new one.
- User wants a course on a controversial / contested topic: include explicit "what is contested" framing in the curriculum, do not present one viewpoint as settled.
## Standing rules (from lessons-learned doc)
Full reference: `system/config/course-build-lessons-learned.md`
**Lesson structure (non-negotiable):**
Every lesson file must contain — in this order — `## Learning objectives`, `## Prerequisites`, `## Content` (with named `### Section N:` subsections), `## Summary`, `## Exercises`, `## Further reading`. No exceptions. The spaced-repetition seeder and the Learning tab progress parser both depend on this structure.
**lessons.json ids must match filenames:**
`01-topic.md` → `"id": "lesson-01"`. `order` must be sequential from 1. Gaps break the progress bar.
**Bloom verb discipline:**
Every learning objective starts with a Bloom-level action verb. Assessment difficulty must not exceed the ceiling verb in that lesson's objectives.
**Domain-grounded examples:**
Every content section includes an example tied to the learner's domain (not generic numbers). For public health / epidemiology courses, use disease/population framing.
**R code style:**
tidyverse only, `library()` at top of every block, expected output as a comment at the end. No package data that isn't in the standard install.
**Pre-publish validation:**
Before setting status → 'active', run:
```bash
for f in knowledge/courses/{slug}/lessons/*.md; do
grep -q "## Summary" "$f" || echo "MISSING: $f"
grep -q "## Exercises" "$f" || echo "MISSING EXERCISES: $f"
done
```
Fix all failures before publishing. Missing summaries produce zero spaced-repetition items for that lesson.
**DB registration:**
`total_modules` = count from `lessons.json`, `progress_pct = 0`, `slug` must match folder name exactly.
**Source strategy (open-access first):**
1. `ask_library()` (PaperQA2 index) → 2. OpenAlex `is_oa=true` → 3. arXiv/bioRxiv/medRxiv → 4. Ask user for paywalled PDF. Never scrape or reproduce copyrighted content.
**Output contract (corrected):**
Lessons live at `knowledge/courses/{slug}/lessons/NN-slug.md` (flat — no subdirectories). The previous contract listed `modules/NN_slug/` which was incorrect.