research/syllabus/skills/syllabus/SKILL.md
Generates a curated supplementary reading list from any course syllabus using Consensus academic search. Grill-me intake (syllabus input format + course audience + year range) plus a grouping forcing-options checkpoint before any search runs — so the reading list matches the course's level and recency need. Parses the syllabus to extract topics and learning outcomes, searches Consensus for recent peer-reviewed papers per topic, and produces a professionally formatted .docx with clickable Consensus links, plain-language summaries calibrated to audience level, and Bloom-higher-order discussion questions tied to course learning goals. Triggers whenever a user uploads a syllabus, course outline, or curriculum document and wants supplementary readings. Also triggers on: 'syllabus reading list', 'find papers for my course', 'create a reading list from this syllabus', 'recent research for my class', 'supplementary readings', 'find journal articles for these topics', 'what recent papers cover this material', 'any new research on these course topics', 'update my syllabus with recent papers'. Even casual mentions when a syllabus is attached should trigger this skill.
npx skillsauth add alirezarezvani/claude-skills syllabusInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Portability: Requires a Consensus MCP connection, Node.js with
docxpackage, and file reading capability for the syllabus. Works in Claude Code CLI natively. In Claude.ai with Consensus MCP + Code Execution + file upload, the workflow is supported.
For an instructor or student with a course syllabus, produce a professional supplementary reading list as .docx containing recent peer-reviewed papers per course section.
This skill uses a bundled JavaScript helper script for DOCX generation rather than inlining the 300+ lines of layout code:
The bundled script is at scripts/generate_reading_list.js. The skill orchestrates the pipeline + invokes the script with JSON input.
Locked verbatim per PR #657 audit.
[Not from Consensus — model knowledge] and excluded.Provide the syllabus — pick one:
- File path (PDF, DOCX, text) — I'll read it
- Pasted content — paste below
- Image of a printed syllabus — attach the image
Why I'm asking: Each format needs a different reader (PDF / DOCX parser / vision). Picking upfront prevents wasted attempts.
Forcing choice. Refuse to start without a syllabus.
Course audience — pick one:
- Undergraduate (intro level)
- Undergraduate (advanced / upper division)
- Graduate (Masters / early PhD)
- Graduate (doctoral / advanced)
- Professional / continuing education
- Mixed
Why I'm asking: Audience dictates summary jargon level and discussion-question complexity. Undergrad summaries define every term; grad summaries assume technical fluency. Discussion questions for undergrads test analysis; for grads test critique and extension.
See references/audience_calibration.md for the canon.
Year range for papers — pick one:
- Last 1 year (most recent only)
- Last 2 years (default — recent + a year of context)
- Last 5 years (broader, includes foundational recent work)
Why I'm asking: Reading lists go stale fast. 1-year filters keep things fresh; 5-year filters surface foundational recent work that's already standard. Drives the year_min parameter on every Consensus search.
Forcing choice with default (last 2 years).
Stop condition: 3 questions max before Phase 1. The post-Phase-2 group-and-confirm checkpoint is its own grill-me moment.
Per Q1 input format:
From extracted text:
Mark inferred learning outcomes as [inferred] in the DOCX.
Use scripts/topic_grouper.py to cluster related topics into 6-12 sections. Heuristic: closely-related topics merge; cross-cutting topics get their own section.
After grouping, present:
Proposed sections: [list with item counts]. Pick one:
- "Looks good — proceed with these sections"
- "Merge sections [X] and [Y]"
- "Split section [X] into two"
- "Add a section for [topic]"
- "Remove section [X]"
Why I'm asking: Grouping drives search allocation. Wrong grouping wastes the search budget on bad clusters. This is the last cheap moment to correct course before searches consume Consensus calls.
Refuse to start Phase 3 without explicit user choice.
Sequential, 1 q/sec. 1-2 queries per section.
Don't just search the topic — search the topic + applied domain:
| ❌ Generic | ✅ Applied-domain | |---|---| | "enzyme kinetics" | "enzyme kinetics food processing applications" | | "machine learning" | "machine learning clinical decision support" | | "thermodynamics" | "thermodynamics renewable energy systems" | | "social network analysis" | "social network analysis public health interventions" |
Boosts paper relevance dramatically. See references/applied_domain_weaving.md for the canon.
For each section:
1. Construct query: "{topic-keywords} {applied-domain-angle}" + year_min from Q3
2. Submit to Consensus (sequential, 1 q/sec gap enforced by citation_tracker)
3. Receive results
4. (If thin) submit one fallback query without applied-domain angle
5. Select 1-3 papers per section (15-25 total across all sections)
Per paper:
| ✅ Good summary | ❌ Bad summary | |---|---| | "This review maps how different diets — Mediterranean, Nordic, vegetarian — reshape the types of fat molecules circulating in your blood, with implications for heart disease risk." | "This paper reviews lipidomic profiles across dietary interventions and their cardiometabolic implications." |
Per paper:
| ✅ Good question | ❌ Bad question | |---|---| | "If dietary fat quality can reshape your lipoprotein lipidome, what does this suggest about the biochemical basis for dietary guidelines recommending unsaturated over saturated fats?" | "What did the authors find?" (Just recall) |
Use scripts/discussion_question_validator.py to flag recall-only questions.
node ../scripts/generate_reading_list.js \
--input /tmp/syllabus_data.json \
--output /path/to/reading_list_<course>_<date>.docx
The script accepts JSON with this schema:
{
"courseTitle": "string",
"courseSubtitle": "string",
"generatedDate": "string",
"yearRange": "string",
"introText": "string",
"learningOutcomes": ["string", ...],
"sections": [
{
"heading": "string",
"papers": [
{
"title": "string",
"authors": "string",
"journal": "string",
"year": number,
"url": "string",
"summary": "string",
"question": "string"
}
]
}
],
"auditLog": {
"totalQueriesSent": number,
"totalPapersReceived": number,
"totalPapersCited": number,
"toolConstraints": "string",
"searchDetails": [
{
"section": "string",
"query": "string",
"papersReturned": number,
"papersSelected": number,
"status": "string"
}
],
"failures": []
}
}
The script handles:
docx package require with multi-location fallbackExternalHyperlink with full Consensus URLs (never truncated)LevelFormat.BULLET for lists (not unicode bullets)See references/bundled_script_pattern.md for why bundled vs inline.
python scripts/office/validate.py <docx>| Script | Role |
|---|---|
| scripts/citation_tracker.py | Consensus three-count audit + 1s sequential discipline at ~/.syllabus_sessions/<session>.json |
| scripts/topic_grouper.py | Heuristic 6-12 section grouping from extracted topics |
| scripts/discussion_question_validator.py | Bloom higher-order quality check; flags recall-only questions |
| scripts/generate_reading_list.js | Bundled Node.js DOCX generator — JSON input → .docx output |
references/applied_domain_weaving.md — search-quality canon (7+ sources)references/audience_calibration.md — undergrad vs grad summary jargon (7+ sources)references/bundled_script_pattern.md — why bundle vs inline (7+ sources)| Failure | Behavior |
|---|---|
| Consensus rate-limit hit | Wait 3s, retry once, log |
| Search returns 0 for a section | Note section as "limited results — consider manual supplementation" |
| 3 consecutive failures | Stop, alert user, share collected so far |
| docx package not installed | Script attempts npm install; if still failing, fail with clear message |
| DOCX validation fails | Unpack XML, log issue, ask user to retry |
| Syllabus format unsupported | List supported formats, ask user to convert |
| Learning outcomes can't be extracted | Infer 3-5 from course description; mark as inferred in document |
Version: 1.0.0
Source spec: megaprompts/10-syllabus-megaprompt.md
Build pattern: Path B (direct conversion). Bundled-JS-DOCX-generator variant.
tools
Code review automation for TypeScript, JavaScript, Python, Go, Swift, Kotlin, C#, .NET, Java, C, C++, Rust, Ruby, PHP, and Dart/Flutter. Analyzes PRs for complexity and risk, checks code quality for SOLID violations and code smells, generates review reports. Use when reviewing pull requests, analyzing code quality, identifying issues, generating review checklists.
tools
Use when planning, funding, scoping, or synthesizing enterprise research across workstreams — clinical study design, R&D program finance, market sizing/surveys, or product/user research. Triggers on "design this clinical study", "what sample size", "R&D budget", "burn rate", "capitalize or expense", "TAM SAM SOM", "market sizing", "survey design", "segment the market", "plan user interviews", "usability test", "synthesize research insights". Forks context to route to one of four Research-Operations sub-skills (clinical-research, research-finance, market-research, product-research) and returns a digest. Distinct from ra-qm-team (regulatory submission), finance (corporate close/valuation), research/grants (funding discovery), product-team (persona/journey/live experiments), and marketing-skill (campaign analytics).
development
Use when managing the money for an internal R&D program or portfolio — building a multi-period program budget with the F&A (indirect) split, tracking burn rate and runway against value-inflection milestones, or routing R&D cost items to a capitalize-vs-expense determination. Every budget output surfaces its assumptions block; capitalize-vs-expense is decision-support only and routes to a named finance owner — it never books an entry or decides accounting treatment. Distinct from finance/financial-analysis (corporate DCF, close, valuation) and research/grants (funding discovery — this manages money already won).
development
Use when planning and synthesizing product/user research as a method-and-repository discipline — selecting the right method for the goal (generative interviews vs usability test vs concept test vs validation), computing method-based saturation/sample size with an explicit confidence level, or synthesizing coded observations into insights while flagging single-source anecdotes. Never fabricates user insight; an insight requires recurrence across independent participants. Distinct from product-team/ux-researcher-designer (persona/journey artifacts), product-discovery (discovery-sprint planning), and experiment-designer (live A/B) — this is the research-ops method + insight-repository layer.