From ai_tutor
Build or revise a domain's `target.yaml` and `curriculum.yaml` for a new learning domain. Routes through Claude's confidence first. If the target is canonical (AP, GRE, IMO, MIT OCW course, standard textbook), generate from prior knowledge with no research. If it's larger, fuzzier, post-cutoff, or niche, pull sources from Harrison's existing materials or vetted online sources, surface them for Harrison to taste-check, then synthesize. Use when Harrison says "build a curriculum for X", "scope a new domain", "research curriculum for Y", "what should I learn for Z", "set up a domain for X", or otherwise asks to plan what to learn before tutoring starts. Does not teach. Produces the scaffolding the socratic / drill / exam-sim modes load later.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ai_tutor:curriculum-researchThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill **scopes** a domain. It does not teach. Output: a populated `domains/<domain>/` with `target.yaml` + `curriculum.yaml` (and optionally `sources.yaml` + `registry/resources.yaml` entries). Tutoring modes consume what this produces.
This skill scopes a domain. It does not teach. Output: a populated domains/<domain>/ with target.yaml + curriculum.yaml (and optionally sources.yaml + registry/resources.yaml entries). Tutoring modes consume what this produces.
Claude and Harrison have inverse strengths:
The skill's job is to route each step to whichever side is stronger. Generation = Claude. Source selection = Harrison (with Claude proposing options).
State this dichotomy out loud to Harrison early in the session so he knows what he's being asked to weigh in on.
~/code/ai_tutor/system/prompts/core.md, student/profile.yaml, and AGENTS.md for conventions.domains/<slug>/ already exists with non-empty curriculum.yaml, ask whether this is a revision or a fresh build.Before doing any work, decide which bucket the domain falls into. Tell Harrison the bucket and reasoning in one short paragraph.
| Bucket | Signal | Action |
|---|---|---|
| Canonical (high confidence) | Standardized exam, well-known course, classic textbook curriculum, post pre-2024 cutoff, Claude can recite the unit list unprompted | Generate target.yaml + curriculum.yaml from prior knowledge. No research. Show Harrison; he edits. |
| Familiar but fuzzy (medium) | Field Claude knows broadly but no canonical syllabus exists (e.g. "modern RL", "transformer interpretability", "post-2024 frontier ML"). Claude could guess but would invent structure. | Propose a draft skeleton, flag every guess explicitly, ask Harrison for sources he already trusts before committing. |
| Niche / post-cutoff / personal (low) | Specific research project, a particular author's framework, recent paper, internal company curriculum, anything where Claude's training set is thin | Do not draft. Ask Harrison what sources he already has. If none, propose a search plan; surface 3–6 candidate sources; let Harrison taste-test before any synthesis. |
Be honest about uncertainty. Bias toward declaring lower confidence than feels comfortable. The cost of over-claiming is a curriculum full of plausible-sounding nonsense; the cost of under-claiming is one extra round-trip with Harrison.
In order of preference:
registry/resources.yaml. Do not record dead links or hallucinated titles.Anti-pattern: dumping a 20-source bibliography. Harrison's taste is the bottleneck; respect his attention.
After confidence-bucketing and (if needed) source curation:
target.yamlApply principle 21. Even if the goal is self-directed, write down what success looks like.
target_type: self_directed with a free-text success criterion. Leave weighting: [] if no natural decomposition.curriculum.yamlConcept list, ordered, with soft prereqs. Default density: 15–40 concepts for a one-semester scope. Smaller is fine for narrower domains.
slug: kebab-case, stable, never changes once a session has touched it.knowledge_points: 2–5 atomic facts the student should be able to state and apply.prereqs: advisory, weighted. Use reason field to explain why.target_refs: link back to target.yaml weighting entries.estimated_hours: rough. Used for pacing, not gating.For low-confidence domains, mark each concept's notes field with the source it came from so future sessions can audit provenance.
sources.yaml + registry/resources.yamlOnly if the domain pulled in real external sources. Keep registry/resources.yaml global; multiple domains can reference the same textbook.
Before writing any file:
target.yaml and curriculum.yaml in the chat. Highlight:
<first concept slug>."prereqs are anything but advisory. Soft graph; do not over-engineer the edges.This skill produces files, not mastery state. Do not write mastery.yaml (the tutoring modes do that on first session). Do tell Harrison which mode to invoke next (default: socratic).
npx claudepluginhub harqian/claude-tutor --plugin ai_tutorCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.