MCPInstall

course-content-authoring

Use this skill when an outline exists and you need to fill in the actual teaching content — lecture notes, sample materials (CSV / YAML / MD samples), quiz items, and any course-specific artifacts like prompt templates or worksheets. Triggers on phrases like "寫講義", "補素材", "出測驗題", "提示詞範本", "撰寫課程內容", "lecture notes", "course material", "quiz questions", "quiz authoring", "prompt templates". Always invoke AFTER course-outline-design is stable, BEFORE static-spa-conversion. This skill produces only the raw .md/.csv/.yaml artifacts — turning them into a website is the next stage's job.

Installs
75
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/kevintsai1202/teaching-site-skills --skill course-content-authoring
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads course-content-authoring automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Course Content Authoring

Schema authority: all primitive field names (unit / concept / prompt / task / material / quiz / faq / illustration) come from _shared/domain-primitives.md. When this skill mentions a field, that file is the source of truth.

Filename convention (English-first): all generated files and directories use English names. The mapping from legacy Chinese names is in _shared/domain-primitives.md §0.

This skill produces the teaching substance of a course: the things a learner reads, copies, listens to, or works through. It anchors every artifact to the outline IDs from course-outline-design, so the next stage (SPA conversion) can wire them up mechanically.

Deliverables (Standard Layout)

course-package/   (your project's content root)
├── day{n}/
│   ├── outline.md           ← from outline stage (do NOT edit here)
│   └── content.md           ← THIS skill writes: lecture script, prompts, exercises, references
├── shared-scenario.md            ← from outline stage
├── supporting-docs.md            ← THIS skill writes: FAQ, environment setup, pre-reading
└── materials/                  ← THIS skill writes: standalone learner artifacts
    ├── README.md             ← index of materials
    └── *.md, *.csv, *.yaml   ← samples, templates, datasets

Material Types (Pick What Fits Your Course)

The example workshop uses these — they're examples, not requirements. Decide per course what makes sense:

TypeFormatWhen to use
Lecture script.mdPer-day teaching narrative, embedded in content.md
Sample document.mdA "before" artifact learners will improve (e.g. an FAQ, a policy doc)
Tabular dataset.csv (UTF-8 BOM!)Practice data for AI processing exercises
Structured config.yamlWhen the exercise involves declarative configuration
PDF reference.pdfOfficial documents (laws, regulations) — usually external sources
Prompt template.md blockDomain-specific reusable prompts (this course uses RTFC framework, others may not — adapt to your course's pedagogy)
Quiz itemsinline in content.md or separatePre-test, post-test, comprehension checks
Worksheets.mdFill-in templates learners complete

About prompt templates: This skill is agnostic to which prompt framework you use. RTFC (Role / Task / Format / Context) was used in the original workshop, but if your course teaches a different framework (e.g. CRISPE, COSTAR, plain examples), use that. Don't force RTFC into a course where it doesn't fit. The framework is part of the course content, not a property of this skill.

CSV Trap (Easy to Miss)

When generating CSV files that will be opened in Excel by non-developer learners, prepend a UTF-8 BOM ():

const content = '' + headerRow + '\n' + dataRows.join('\n');

Without it, Excel on Windows mis-detects encoding and shows mojibake. Learners will think the file is broken. This bug was found late in the example workshop — bake it in from the start.

Anchor Everything to Outline IDs

Every artifact you produce must trace to a unit ID. Use this header pattern in lecture notes:

## u-3: {Unit title from outline.md}

**對應任務**: d2-u3-t1, d2-u3-t2
**對應素材**: 客訴處理SOP.md, FAQ官方版.md
**圖片需求 (illustrations)**:
- `day2-u3-hero.png` — hero / 主視覺:{學員角色} 在 {情境} 操作的場景圖(AI 生圖)
- `day2-u3-flow.svg` — 概念流程:{步驟 A → B → C}(手繪 SVG,含中文標籤)
- `day2-u3-example.png` — 結果範例截圖(選填)

{lecture content here}

Why: the SPA conversion stage will read these markers to auto-link tasks, materials, content, and visual asset slots. If you skip them, the SPA author has to re-read everything to figure out the wiring, and Stage 5 (web-visual-assets) has no spec to generate against — you end up with a site that has only a cover image.

Task IDs Are Forever

When writing task descriptions inside content.md, assign each task a stable ID (e.g. d2-u3-t1). These IDs will become localStorage keys in the deployed website. Three rules:

  1. Never rename a published task ID. Students' progress is keyed to it.
  2. Never reuse a deleted task ID. If you remove a task, the ID retires permanently.
  3. Two formats coexist in practice (d{n}-u{m}-t{k} and day{n}-u{m}-t{k}). Pick one for new content; don't mix.

Quiz Item Discipline

If the course has a quiz, write items numbered sequentially (q1, q2, ...). Be aware these numbers will leak into multiple places once on the SPA:

  • The quiz array itself
  • A qIndexToDay()-style helper that maps each item to its source chapter (so wrong answers can link back)
  • Hardcoded strings in the SPA: "結訓測驗(N題)", score display — / N, passing threshold s >= K

Renumber-safe authoring: think of the quiz as append-only. If you delete q3, leave the slot empty in your draft and renumber only at the very last stable moment, with a checklist of all the places to update.

Hidden Materials Pattern

Some materials are for instructors only (answer keys, pre/post-test scoring) or conditional (only shown if a feature flag is on). Mark them explicitly in materials/README.md:

| 素材 | 對象 | 備註 |
|---|---|---|
| 員工差勤辦法.md | 學員 | Day 2 公開素材 |
| 結訓測驗解答.md | 講師 | 不要納入 SPA materials[],僅講師端使用 |

The SPA conversion stage will read this column and exclude instructor-only items.

Anti-Patterns

  • Writing content before outline is locked — every back-edit cascades to multiple files.
  • Embedding prompt frameworks the course doesn't actually teach — if your course doesn't use RTFC, don't force-fit it just because the example template has it.
  • Quiz items without source-chapter mapping — when a learner gets one wrong, they need to know where to review. Tag every quiz item with the unit it came from.
  • Long flat material list with no instructor / learner distinction — by Day 4 the instructor doesn't know which file is what.
  • Forgetting CSV BOM — see above.

Completion Gate (Hard Rule — must pass before hand-off)

Before declaring "content draft complete" and suggesting static-spa-conversion, every item below must have a written artefact in the corresponding .md file (not just a verbal "yes"). Walk the user through them; if an artefact is thin or missing, ask one clarifying question and finish it before moving on.

  1. Per-day content.md exists for every Day declared in overview.md 每日主題 table. A Day file with only the title heading fails — it must contain unit sections.
  2. Every outline unit ID has a matching ## u-{id} section in its day's content.md. Run a quick diff: list of unit IDs in day{n}/outline.md must be a subset of ## u- headings in day{n}/content.md. Missing sections fail the gate.
  3. Every unit section has substance — at least one of: lecture script ≥ ~10 lines, **對應任務** listing real task IDs, **對應素材** listing real material filenames. A unit that only has a heading + TODO placeholder fails.
  4. Every unit section declares **圖片需求 (illustrations)** with 1–3 entries. Each entry must specify (a) filename stem (e.g. day2-u3-hero.png), (b) image kind (hero / diagram / screenshot / scene), (c) one-line spec for the visual asset author. Units that genuinely need no image must declare a single waiver line: - waived: {reason, e.g. 5-min admin slot}. Silence does not pass.
  5. Quiz items (if applicable) tagged with sourceUnit — every q* item points to a real unit ID so wrong answers can route students back to the source chapter. Untagged items fail.
  6. materials/README.md exists with the material index, distinguishing 學員 vs 講師 columns (see Hidden Materials Pattern above).

If the user pushes "可以了,先轉成網頁" before all items have written artefacts, refuse politely:

「Stage 2 還有 N 個單元沒寫實質內容(或沒設圖片需求)。直接進 Stage 3 會生出薄殼網頁,學員看到只有標題 + 沒插圖。先把第 X 項補上,大概 Y 分鐘,比之後重做網頁省好幾倍。」

If the user explicitly demands a thin demo (與 teaching-site Stage 2 Override Policy 相同條件):依照 orchestrator 文件的三步驟(標 stub 註解、設 __thinDemo: true、明確告知學員顯示效果)才放行,不要在 Stage 2 內部偷偷放水。

Hand-off

When this stage finishes (Completion Gate passed), you should have:

  • Per-day content.md filled in, every outline unit ID covered by a ## u-{id} section
  • Each unit section: lecture script + tasks + materials refs + 圖片需求 (illustrations) 1–3 entries
  • All material files in materials/ with an index README distinguishing 學員 / 講師 items
  • Quiz draft (if applicable) numbered q1..qN with sourceUnit source-chapter tags
  • Every artifact traceable to an outline unit ID

Tell the user: "content draft complete. Next stage (static-spa-conversion) will convert this into course-data.js + index.html, including an illustrations: [] array per unit derived from your 圖片需求 blocks. After Stage 3/4, web-visual-assets will fulfil those slots — your spec lines become its prompt input. Don't change unit IDs or task IDs from this point — they'll become localStorage keys."

FAQ

What does the course-content-authoring skill do?

Use this skill when an outline exists and you need to fill in the actual teaching content — lecture notes, sample materials (CSV / YAML / MD samples), quiz items, and any course-specific artifacts like prompt templates or worksheets. Triggers on phrases like "寫講義", "補素材", "出測驗題", "提示詞範本", "撰寫課程內容", "lecture notes", "course material", "quiz questions", "quiz authoring", "prompt templates". Always invoke AFTER course-outline-design is stable, BEFORE static-spa-conversion. This skill produces only the raw .md/.csv/.yaml artifacts — turning them into a website is the next stage's job.

How do I install course-content-authoring?

Run npx skills add https://github.com/kevintsai1202/teaching-site-skills --skill course-content-authoring in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/course-content-authoring/ (personal) or .claude/skills/course-content-authoring/ (project).

Which AI agents can use course-content-authoring?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is course-content-authoring safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains course-content-authoring?

It is published by kevintsai1202 in kevintsai1202/teaching-site-skills. It has 75 recorded installs.

More from kevintsai1202/teaching-site-skills

View all →

course-outline-design

kevintsai1202/teaching-site-skills

Open the skill to read its SKILL.md instructions.

course-ebook-publishing

kevintsai1202/teaching-site-skills

Open the skill to read its SKILL.md instructions.

course-corporate-edition

kevintsai1202/teaching-site-skills

Open the skill to read its SKILL.md instructions.

teaching-site-design-system

kevintsai1202/teaching-site-skills

Open the skill to read its SKILL.md instructions.

teaching-site

kevintsai1202/teaching-site-skills

Open the skill to read its SKILL.md instructions.

66 installs

static-spa-conversion

kevintsai1202/teaching-site-skills

Open the skill to read its SKILL.md instructions.

Marketing & SEO65 installs

Popular education & science skills

View category →

teach

mattpocock/skills

Teach the user a new skill or concept, within this workspace.

Education & Science874K installs

scaffold-exercises

mattpocock/skills

Create exercise directory structures with sections, problems, solutions, and explainers that pass linting. Use when user wants to scaffold exercises, create exercise stubs, or set up a new course section.

Education & Science488.2K installs

paper-context-resolver

lllllllama/rigorpilot-skills

Rigor Paper Context helper for README-first deep learning repo reproduction. Use only when the README and repository files leave a narrow reproduction-critical gap and the task is to resolve a specific paper detail such as dataset split, preprocessing, evaluation protocol, checkpoint mapping, or runtime assumption from primary paper sources while recording conflicts. Do not use for general paper summary, repo scanning, environment setup, command execution, title-only paper lookup, or replacing README guidance by default.

Education & Science478.3K installs

caveman-learn

juliusbrussee/caveman

Act on a Caveman learn report - review the ranked token sinks, apply cost-lowering fixes with per-edit consent, and report what those fixes returned. Use when asked to lower an agent's token cost, what caveman has saved, to trim a heavy CLAUDE.md, or to offload re-pasted context into cavemem.

Education & Science107.9K installs

gsap-plugins

greensock/gsap-skills

Official GSAP skill for GSAP plugins — registration, ScrollToPlugin, ScrollSmoother, Flip, Draggable, Inertia, Observer, SplitText, ScrambleText, SVG and physics plugins, CustomEase, EasePack, CustomWiggle, CustomBounce, GSDevTools. Use when the user asks about a GSAP plugin, scroll-to, flip animations, draggable, SVG drawing, or plugin registration.

Education & Science67.9K installs

teach-impeccable

pbakaus/impeccable

DEPRECATED: Use /impeccable teach instead. This command has been folded into the impeccable skill.