Curriculum Orchestrator
Coordinates the curriculum pipeline without owning any specialist logic. The contract is curriculum-orchestrator.md — read it; this skill is how to run it in your harness, not a restatement of it.
These skills only work inside a curriculum workspace. They read a
learning/tree and the source repos named in yoursources.yaml(start fromsources.example.yaml), so everylearning/...path in this family resolves against that workspace, not against the skill folder. Run them anywhere else and they have nothing to operate on.
Before anything else
learning/ is downstream. Courses are outputs of this pipeline, never inputs to it. If you find yourself reading a course to write a course, stop — the source is in documentation/ or another repo.
Operations
| Operation | Runs |
|---|---|
discover |
curriculum-discover |
preview |
discover → classify → extract → design → govern |
generate |
preview → generate-artifacts → govern (again, against the artifacts) |
publish |
govern → blocked unless your policy names an approved destination |
Governance runs twice in generate — once on the course definition, once on what was rendered from it. Skipping the second is how an approved course produces an unapproved artifact.
Running it
Establish the source revision first. Record the commit of every repo you are reading. A run against a dirty tree cannot be reproduced and must not be published.
Determine impacted courses. For a documentation change, find which courses cite it:
grep -rl "path: <changed-path>" learning/courses/*/course.yamlCourses in other repos cite it too — check every repo listed in your
sources.yaml.Run the deterministic gates before spending tokens on agents:
.\scripts\validate-curriculum.ps1A broken source path fails here in a second. Discovering it after four agent stages is waste.
Invoke specialists in dependency order. Pass structured outputs, not conversational summaries. Preserve
correlation_id,source_revision, evidence, warnings and errors through every step — the envelope is in the contract.Stop at a failed gate. Do not repair content to make it pass, and do not downgrade a failure because generation was requested.
Guardrails
These are the ones most likely to be rationalized away mid-run:
- Never publish from an unresolved source revision. Fail closed.
- Never treat a generated instructional example as a documented standard. If the source did not say it, the course may not assert it.
- Never invent a missing procedure. A documentation gap is a bug to file against
documentation/, not a hole for the course to paper over. A course that fills the gap locally lies the moment the real procedure lands. - Never edit source documentation as a side effect. If the source is wrong, that is a separate change with its own review.
- Never let a specialist publish directly.
Partial failure
Continue with partial discovery when individual files are unreadable, and record every omission — a silently shortened source manifest produces a confidently incomplete course. Do not retry permanent validation failures; bounded retries for transient tool or network failures only.
Output
A run manifest: outputs, warnings, errors, provenance, and publication status. Every artifact carries a content hash, generator version, and source revision — that is what makes reprocessing unchanged content idempotent, and what lets the sync agent tell changed from unchanged without re-uploading everything.