Data Storytelling
ynulihao/AgentSkillOS
Transform data into compelling narratives using visualization, context, and persuasive structure.
A skill your agent uses when turning "I want to teach X" into a defensible course skeleton — measurable outcomes (Bloom + ABCD), assessment that proves each one, sequenced modules, and an…
$ npx skills add ericrisco/rsc-harness --skill course-builder -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ericrisco/rsc-harness course-builder --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/course-builder .claude/skills/course-builder && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "course-builder" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/course-builder into .claude/skills/course-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "course-builder", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ericrisco/rsc-harness/tree/main/skills/course-builderType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ericrisco/rsc-harness --skill course-builder -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ericrisco/rsc-harness course-builder --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/course-builder .agents/skills/course-builder && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "course-builder" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/course-builder into .agents/skills/course-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "course-builder", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill course-builder -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ericrisco/rsc-harness course-builder --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/course-builder .cursor/skills/course-builder && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "course-builder" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/course-builder into .cursor/skills/course-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "course-builder", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ericrisco/rsc-harness.git --path skills/course-builder--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ericrisco/rsc-harness --skill course-builder -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ericrisco/rsc-harness course-builder --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/course-builder .gemini/skills/course-builder && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "course-builder" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/course-builder into .gemini/skills/course-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "course-builder", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ericrisco/rsc-harness course-builderInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ericrisco/rsc-harness --skill course-builder -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/course-builder .github/skills/course-builder && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "course-builder" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/course-builder into .github/skills/course-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "course-builder", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill course-builder -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ericrisco/rsc-harness course-builder --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/course-builder .opencode/skills/course-builder && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "course-builder" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/course-builder into .opencode/skills/course-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "course-builder", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
course-builderA skill your agent uses when turning "I want to teach X" into a defensible course skeleton — measurable outcomes (Bloom + ABCD), assessment that proves each one, sequenced modules, and an…
Course Builder is an agent skill from ericrisco/rsc-harness. Use when turning "I want to teach X" into a defensible course skeleton — measurable outcomes (Bloom + ABCD), assessment that proves each one, sequenced modules, and an outcome×module×assessment matrix — for a workshop, bootcamp, cohort or onboarding track. NOT making one concept land emotionally with story or analogy (that is course-storytelling).
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/assessment-design.md`).
It sits in Writing & Content, covering Storytelling. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 92fde8f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Shell), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Course Builder loads about 3k tokens when it runs, and up to ~6.1k if it reads all its reference files. Until then it costs about 91 tokens; SKILL.md has 1,049 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from ericrisco/rsc-harness at commit 92fde8f, republished under its MIT licence (© ericrisco). 1,049 words, ~3,003 tokens.
.claude/skills/course-builder/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.Outcomes promise what the learner can DO. Assessment is the proof. Modules are the build order. If the three don't line up, you have a content dump, not a course. You design them backward — outcomes first, assessment second, content last — and you emit a matrix that makes the alignment checkable.
This skill owns the skeleton: the measurable outcomes, the assessment that certifies each one, the module sequence that builds toward them, and the alignment matrix tying it all together. It does not own the teaching of any one concept.
The litmus. If the question is "what must the learner be able to DO, how do we prove it, and in what order do we build it?" → here. If it's "how do I make THIS concept click and stick?" → ../course-storytelling/SKILL.md.
Route elsewhere when: auditing a finished course for gaps, redundancy, anachronisms with a written report → ../review/SKILL.md; turning a designed module into slides/decks → ../presentations/SKILL.md (+ ../design/SKILL.md for the visual system); sales/landing copy and launch emails → ../marketing/SKILL.md (you design the learning contract, never the pitch); fact-checking or sourcing the subject matter → ../research-ops/SKILL.md (you structure what the user already knows); a repeatable internal procedure with steps but no outcomes/assessment → ../sop-builder/SKILL.md (an SOP tells someone the steps; a course changes what they can DO and proves it).
You cannot design a course backward without knowing the destination. Do not write a single outcome until you have all three. Why: an outcome scoped for a senior engineer in a 90-minute workshop is wrong for a beginner in a 12-week cohort — same topic, different contract.
If a 02-DOCS/wiki/teaching/ profile exists (the convention shared with ../course-storytelling/SKILL.md), read it first and reuse it. Otherwise interview in ONE batch — ask all three at once, do not dribble questions. Incomplete grounding = STOP and ask. Depth, the interview script, and scope right-sizing by format → references/grounding-and-scoping.md.
Run it in order. Do not jump to modules. UbD has exactly three stages in order — desired results → acceptable evidence → learning experiences (Wiggins & McTighe, Understanding by Design). Content designed first is a dump with no destination, and "I already have these slides, build a course around them" inverts the contract: outcomes decide what content survives.
Stage 0 Grounding gate WHO + WHAT transformation + FORMAT. Incomplete → STOP.
Stage 1 Outcomes 3–8 course-level outcomes. Measurable Bloom verb + ABCD.
Verb banlist enforced. Right-sized to format.
Stage 2 Assessment For EACH outcome, the evidence that proves it.
Verb-match the outcome. Place formative + summative.
Check content validity (covers the breadth of outcomes).
Stage 3 Modules + sequence One focus per module, prerequisite order. Each module
maps to >=1 outcome. No orphans, no unproven outcomes.
Stage 4 Alignment matrix Emit outcome x module x assessment. The checkable artifact.
Stage 5 QA gate Run scripts/verify.sh over the curriculum doc. Fix warnings
or justify them. Then hand modules to course-storytelling.Pick the verb at the level the learner must actually operate. Recall ≠ build. The revised taxonomy (Anderson & Krathwohl, 2001) is six ascending levels of verbs, each supplying observable action verbs — a verb you can't observe, you can't assess.
Level What the learner does Sample verbs
Remember recall facts list, define, name, label, recall
Understand explain in own words explain, summarize, classify, compare
Apply use in a new situation apply, use, implement, solve, run
Analyze break apart, find relations analyze, differentiate, debug, diagram
Evaluate judge against criteria evaluate, critique, justify, prioritize, review
Create produce something new design, build, compose, construct, shipBanlist — never "understand", "know", "learn about", "appreciate", "be aware", "be familiar". They name a private mental state, not an observable behavior. Replace with what the learner does: list, explain, build, debug, evaluate, design.
Every outcome is ABCD-complete — a bare verb without a condition and a degree is not yet assessable ("write code" vs "given a failing test, write code that makes it pass"):
[Audience] the learner
[Behavior] <Bloom verb> + <object>
[Condition] given <situation / tools / inputs>
[Degree] <criterion that counts as success>Bad → Good (the banlist verb is the tell):
Bad: Students will understand REST APIs.
Good: Given a spec, the learner builds a REST endpoint that returns the correct
status code for 3 named error cases (400, 404, 500).
Bad: Learners will know SQL joins.
Good: Given two tables, the learner writes a query joining them that returns the
expected rows for 2 of 2 test cases.
Bad: Participants will appreciate good test design.
Good: Given a 20-line module, the learner writes 3 tests that cover the happy path
and 2 edge cases, all passing.Full per-level verb tables, the banlist, more worked ABCD examples, and course-level vs module-level granularity → references/outcomes-and-blooms.md.
Assessment is the proof, not an afterthought. For every outcome, ask: what would I have to SEE the learner do to believe they achieved it? — and make that the assessment. Place both kinds: an outcome with no evidence is a promise you never keep, and a course with only the final exam gives the learner no feedback loop.
Formative (during) Summative (at the end)
Job feedback, guide improvement certify mastery / accountability
Stakes low / none high — the grade, the cert
Examples quizzes, skill checklists, capstone project, final exam,
drafts, peer review, exit portfolio, graded build
tickets
Bloom fit Remember/Understand/Apply Apply/Analyze/Evaluate/CreateTwo hard checks:
The full formative↔summative menu mapped to Bloom levels, the content-validity / blueprint checklist, and the verb-match rule worked end-to-end → references/assessment-design.md.
Order modules by prerequisite (you can't build before you can run), give each one focus, and map each to ≥1 outcome. Then emit the matrix — this is the artifact scripts/verify.sh checks.
| Outcome | Module(s) | Assessment (F=formative, S=summative) |
|----------------------------------|------------------|---------------------------------------|
| O1 build a REST endpoint | M2, M3 | F: M2 quiz · S: capstone API |
| O2 debug a failing request | M4 | F: M4 debug drill · S: capstone API |
| O3 evaluate an API's error model | M5 | F: M5 peer review · S: capstone rubric|Read the matrix two ways: down a column finds orphan modules (a module in no row → content the contract never asked for, so cut it or write the outcome it serves); across the outcome list finds unproven outcomes (an outcome with an empty assessment cell → design evidence). A complete matrix has no empty cells.
Situation Then
Live cohort Schedule synchronous formative checkpoints; peer
assessment is cheap and valuable.
Self-paced Formative must be self-graded/auto-graded (quizzes,
tests that run); no instructor in the loop.
Short workshop (<= half day) 1-2 outcomes, mostly Apply; one summative artifact, no exam.
Full course / bootcamp 5-8 outcomes spanning up to Create; staged formative +
a capstone summative.
Knowledge outcome Assess with explanation/application, not recognition alone.
Skill outcome Assess with a performance/build, never a quiz.
Attitude/disposition outcome Assess with reflection + observed behavior; hardest to
prove — keep few and honest.| Bad | Why it fails | Do instead |
|---|---|---|
| Content-first: "build a course around my slides" | Inverts the contract; content with no destination | Write outcomes first; let them decide what content survives |
| Vanity outcome: "students will understand X" | Names a private state, not observable → unassessable | Use a measurable Bloom verb in ABCD form |
| Orphan module: a module mapped to no outcome | Content the contract never asked for | Cut it, or write the outcome it serves |
| Unproven outcome: an outcome with no assessment | A promise you never verify | Design evidence that requires the outcome's verb |
| Verb mismatch: outcome "design", quiz tests "recall" | Proves the wrong thing | Make the assessment require the outcome's verb |
| Summative-only: just a final exam | No feedback loop during learning | Place formative checkpoints throughout |
| Scope creep: bootcamp outcomes in a workshop | None are actually achievable in the time | Right-size outcome count to the format |
scripts/verify.sh checks your curriculum's STRUCTURE and ALIGNMENT (measurable verbs, the matrix, proven outcomes, formative + summative). Fix its warnings or justify them.
Then hand each module to ../course-storytelling/SKILL.md to make the teaching land (epiphany, named models, grounded analogies). You built what and in what order; that skill makes it stick. The boundary is executable: this skill's verify.sh does not judge whether the teaching lands, and course-storytelling's checks narrative, not structure.
© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 6 other files (scripts, references) in skills/course-builder of ericrisco/rsc-harness.
Open the folder on GitHubat commit 92fde8f
Course Builder next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Course Builder this skillericrisco/rsc-harness | 156 | — | ~3k | Automated safety check: Pass | MIT | |
| Data Storytellingynulihao/AgentSkillOS | 617 | 15 repos | ~2.8k | Automated safety check: Pass | None | |
| Chinese Novel Writing Systemleenbj/novel-creator-skill | 666 | — | ~3.9k | Automated safety check: Pass | None | |
| Chinese Novelist Chapter WriterPenglongHuang/chinese-novelist-skill | 3.3k | — | ~491 | Automated safety check: Warn | MIT | |
| Liu Run Style Business Column Writerliangdabiao/liurun-bookwriter-skills | 273 | — | ~1.8k | Automated safety check: Pass | MIT | |
| Business Insight Essay Writerliangdabiao/liurun-bookwriter-skills | 273 | — | ~2.5k | Automated safety check: Pass | MIT |
ynulihao/AgentSkillOS
Transform data into compelling narratives using visualization, context, and persuasive structure.
leenbj/novel-creator-skill
Guides long-form Chinese novel writing from a rough idea through outlines, chapter drafts and quality gates, with file-based memory for a story meant to reach 300万字.
PenglongHuang/chinese-novelist-skill
Writes long Chinese novels chapter by chapter through guided questions, outlining, drafting with cliffhangers and automatic validation, with resumable projects.
liangdabiao/liurun-bookwriter-skills
Writes long-form Chinese business commentary in Liu Run's voice, using his eight writing principles, three structures, and SCQA logic patterns.
liangdabiao/liurun-bookwriter-skills
Drafts Chinese business-insight essays, short audio scripts and year-end speeches in a specific public commentator's rhythm, built from his books, talks and broadcasts.
ZCZHAO-1999/shakespeare-writing-studio
Produce publish-ready Chinese and English writing packages across WeChat articles, Medium/Substack essays, research notes, founder memos, op-eds, speeches, data storytelling, statistical graphics…
ericrisco/rsc-harness
A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…
ericrisco/rsc-harness
A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…
ericrisco/rsc-harness
A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…
ericrisco/rsc-harness
A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…
ericrisco/rsc-harness
A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…
ericrisco/rsc-harness
A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.
Categories
A skill your agent uses when turning "I want to teach X" into a defensible course skeleton — measurable outcomes (Bloom + ABCD), assessment that proves each one, sequenced modules, and an…. Course Builder is an agent skill from ericrisco/rsc-harness. Use when turning "I want to teach X" into a defensible course skeleton — measurable outcomes (Bloom + ABCD), assessment that proves each one, sequenced modules, and an outcome×module×assessment matrix — for a workshop, bootcamp, cohort or onboarding track.
Course Builder fits situations like: turning I want to teach X into a defensible course skeleton — measurable outcomes (Bloom + ABCD); assessment that proves each one; sequenced modules; an outcome×module×assessment matrix — for a workshop.
Run `npx skills add ericrisco/rsc-harness --skill course-builder -a claude-code`. Or copy the skill folder (skills/course-builder in ericrisco/rsc-harness) into .claude/skills/course-builder in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ericrisco/rsc-harness --skill course-builder -a codex`. Or copy the skill folder (skills/course-builder in ericrisco/rsc-harness) into .agents/skills/course-builder in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill course-builder -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/course-builder, .gemini/skills/course-builder, .github/skills/course-builder and .opencode/skills/course-builder in your project.
Going by SKILL.md and its folder, Course Builder needs a shell for the scripts in its folder. Our summary lists: A Bash shell.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Course Builder is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Course Builder: Data Storytelling (ynulihao/AgentSkillOS, 617 stars), Chinese Novel Writing System (leenbj/novel-creator-skill, 666 stars), Chinese Novelist Chapter Writer (PenglongHuang/chinese-novelist-skill, 3.3k stars) and Liu Run Style Business Column Writer (liangdabiao/liurun-bookwriter-skills, 273 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 156 GitHub stars. The repository holds 229 skills in this directory. The repository was last updated on October 6, 2026.
Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.