syllabus

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Syllabus — Course Supplementary Reading List

课程大纲——补充阅读列表

Portability: Requires a Consensus MCP connection, Node.js with
docx
package, 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.
可移植性: 需要Consensus MCP连接、安装了
docx
包的Node.js,以及读取大纲文件的能力。在Claude Code CLI中可原生运行。在Claude.ai中,搭配Consensus MCP + 代码执行 + 文件上传功能,该工作流也支持。
针对拥有课程大纲的教师或学生,生成包含各课程板块近期同行评审论文的专业补充阅读列表,保存为
.docx
格式。

Architectural Pattern: Bundled Script

架构模式:捆绑脚本

This skill uses a bundled JavaScript helper script for DOCX generation rather than inlining the 300+ lines of layout code:
  • DOCX generation logic is reusable + complex
  • Better separation of concerns: skill = orchestration + intelligence; script = mechanical document assembly
  • Token-efficient: skill doesn't re-derive layout each run
  • Easier to maintain and version
The bundled script is at
scripts/generate_reading_list.js
. The skill orchestrates the pipeline + invokes the script with JSON input.
此技能使用捆绑式JavaScript辅助脚本生成DOCX文件,而非内联300多行布局代码:
  • DOCX生成逻辑可复用且复杂度高
  • 关注点分离更清晰:技能负责编排与智能决策;脚本负责机械文档组装
  • 令牌效率更高:技能无需每次运行都重新推导布局
  • 更易于维护和版本控制
捆绑脚本位于
scripts/generate_reading_list.js
。技能负责编排流程,并以JSON输入调用该脚本。

Agent Integrity Rules (Research-Pack Convention)

Agent完整性规则(研究包约定)

Locked verbatim per PR #657 audit.
  • Only use what Consensus returns. Every paper title, author, journal, year, URL must come from this session's tool calls. Training-knowledge papers labeled
    [Not from Consensus — model knowledge]
    and excluded.
  • Confirm before moving on. A search isn't complete until response received and inspected.
  • Track three counts. Queries sent / papers received / papers cited. Surface in audit summary.
  • Surface gaps, don't fill them. Section with one paper + note about limited results > section padded with fabrications.
严格遵循PR #657审核的原文内容。
  • 仅使用Consensus返回的内容。每篇论文的标题、作者、期刊、年份、URL必须来自本次会话的工具调用。标记为
    [Not from Consensus — model knowledge]
    的模型训练知识相关论文需排除。
  • 继续前先确认。收到响应并检查后,搜索才算完成。
  • 跟踪三项计数。已发送查询数/已接收论文数/已引用论文数。在审核摘要中展示。
  • 如实呈现缺口,勿填补。某板块仅有一篇论文并标注结果有限 > 编造内容填充板块。

Phase 0: Grill-Me Intake (3 forcing questions)

阶段0:Grill-Me输入(3个强制问题)

Q1 (root) — Syllabus input

Q1(核心)——大纲输入

Provide the syllabus — pick one:
  1. File path (PDF, DOCX, text) — I'll read it
  2. Pasted content — paste below
  3. 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.
提供课程大纲——选择一项:
  1. 文件路径(PDF、DOCX、文本)——我将读取它
  2. 粘贴内容——在下方粘贴
  3. 打印版大纲图片——附上图片
提问原因: 每种格式需要不同的读取工具(PDF/DOCX解析器/视觉识别)。提前选择可避免无效尝试。
强制选择。未提供大纲则拒绝启动。

Q2 (depends on Q1) — Course audience

Q2(取决于Q1)——课程受众

Course audience — pick one:
  1. Undergraduate (intro level)
  2. Undergraduate (advanced / upper division)
  3. Graduate (Masters / early PhD)
  4. Graduate (doctoral / advanced)
  5. Professional / continuing education
  6. 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.
课程受众——选择一项:
  1. 本科(入门级)
  2. 本科(高级/高年级)
  3. 研究生(硕士/早期博士)
  4. 研究生(博士/高级)
  5. 职业/继续教育
  6. 混合受众
提问原因: 受众决定了摘要的术语难度和讨论题的复杂度。本科摘要需定义每个术语;研究生摘要假定读者具备技术熟练度。本科生讨论题侧重测试分析能力;研究生讨论题侧重测试批判和拓展能力。
参考规范文档
references/audience_calibration.md

Q3 (depends on Q1) — Year range

Q3(取决于Q1)——年份范围

Year range for papers — pick one:
  1. Last 1 year (most recent only)
  2. Last 2 years (default — recent + a year of context)
  3. 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.
论文年份范围——选择一项:
  1. 最近1年(仅最新内容)
  2. 最近2年(默认——最新内容+1年背景)
  3. 最近5年(范围更广,包含近期基础研究成果)
提问原因: 阅读列表容易过时。1年筛选保持内容新鲜;5年筛选可呈现已成为标准的近期基础研究成果。该选项将驱动每次Consensus搜索的year_min参数。
强制选择,默认选项为最近2年。
停止条件: 进入阶段1前最多提问3个问题。阶段2后的分组确认检查点是独立的Grill-Me环节。

Phase 1: Parse the Syllabus

阶段1:解析大纲

Per Q1 input format:
  • PDF: use PDF reader; extract text
  • DOCX: use pandoc or DOCX parser; extract text
  • Text/pasted: read directly
  • Image: use vision; extract text
From extracted text:
  1. Course title + instructor + term
  2. Topic list (lecture titles, week-by-week breakdown, etc.)
  3. Learning outcomes (if explicit; if missing, infer 3-5 from description)
Mark inferred learning outcomes as
[inferred]
in the DOCX.
根据Q1的输入格式:
  • PDF: 使用PDF阅读器;提取文本
  • DOCX: 使用pandoc或DOCX解析器;提取文本
  • 文本/粘贴内容: 直接读取
  • 图片: 使用视觉识别;提取文本
从提取的文本中获取:
  1. 课程名称 + 授课教师 + 学期
  2. 主题列表(讲座标题、每周内容分解等)
  3. 学习目标(若明确列出;若缺失,从描述中推断3-5项)
在DOCX中标记推断的学习目标为
[inferred]

Phase 2: Group Topics + Confirm with User

阶段2:主题分组 + 用户确认

Group via topic_grouper.py

通过topic_grouper.py分组

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.
使用
scripts/topic_grouper.py
将相关主题聚类为6-12个板块。启发式规则:密切相关的主题合并;跨领域主题单独设为板块。

Group-and-Confirm Checkpoint (Forcing Options)

分组确认检查点(强制选项)

After grouping, present:
Proposed sections: [list with item counts]. Pick one:
  1. "Looks good — proceed with these sections"
  2. "Merge sections [X] and [Y]"
  3. "Split section [X] into two"
  4. "Add a section for [topic]"
  5. "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.
分组完成后,向用户展示:
建议板块:[带项目数量的列表]。选择一项:
  1. "看起来不错——按这些板块继续"
  2. "合并板块[X]和[Y]"
  3. "拆分板块[X]为两个"
  4. "添加[主题]板块"
  5. "移除板块[X]"
提问原因: 分组决定了搜索资源分配。错误的分组会浪费搜索预算在不合理的聚类上。这是搜索消耗Consensus调用前,最后一个低成本的调整机会
未获得用户明确选择前,拒绝进入阶段3。

Phase 3: Search Consensus per Section

阶段3:按板块搜索Consensus

Sequential, 1 q/sec. 1-2 queries per section.
顺序执行,每秒1个查询。每个板块1-2个查询。

Applied-Domain Weaving (Critical)

应用领域融合(关键)

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.
不要仅搜索主题——搜索主题+应用领域
❌ 通用搜索✅ 应用领域搜索
"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"
可大幅提升论文相关性。参考规范文档
references/applied_domain_weaving.md

Per-Section Pattern

单板块流程

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)
For each section:
  1. 构建查询:"{主题关键词} {应用领域角度}" + Q3中的year_min参数
  2. 提交至Consensus(按citation_tracker要求,顺序执行,间隔1秒)
  3. 接收结果
  4. (若结果稀少)提交一个不带应用领域角度的备用查询
  5. 每个板块选择1-3篇论文(所有板块总计15-25篇)

Selection Priorities

选择优先级

  1. Relevance — paper directly addresses the section topic
  2. Reviews / meta-analyses — synthesize the field
  3. Citation count — established work
  4. Applied-domain connection — tied to the course's domain (e.g., engineering vs theory)
  1. 相关性——论文直接对应板块主题
  2. 综述/元分析——整合领域研究成果
  3. 引用量——已确立影响力的研究
  4. 应用领域关联——与课程领域绑定(如工程vs理论)

Phase 4: Write Summaries + Discussion Questions

阶段4:撰写摘要 + 讨论题

Summary writing

摘要撰写

Per paper:
  • Plain language (calibrated to audience from Q2)
  • 2-3 sentences
  • Define jargon if undergraduate audience; assume fluency if graduate
每篇论文:
  • 通俗语言(根据Q2的受众调整)
  • 2-3句话
  • 若为本科受众,定义术语;若为研究生受众,假定具备技术熟练度

Quality bars

质量标准

✅ 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."
✅ 优质摘要❌ 劣质摘要
"这篇综述梳理了不同饮食——地中海饮食、北欧饮食、素食——如何重塑血液中循环的脂肪分子类型,及其对心脏病风险的影响。""本文综述了饮食干预中的脂质组学特征及其心脏代谢影响。"

Discussion question writing

讨论题撰写

Per paper:
  • Bloom higher-order (apply / analyze / evaluate)
  • Tied to a specific course learning outcome
  • Promotes discussion, not just recall
✅ 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.
每篇论文:
  • 布鲁姆高阶(应用/分析/评估)
  • 绑定特定课程学习目标
  • 促进讨论,而非仅考察回忆
✅ 优质问题❌ 劣质问题
"如果膳食脂肪质量能重塑脂蛋白脂质组,这对饮食指南推荐不饱和脂肪优于饱和脂肪的生化基础有何启示?""作者发现了什么?"(仅考察回忆)
使用
scripts/discussion_question_validator.py
标记仅考察回忆的问题。

Phase 5: Generate .docx via Bundled Script

阶段5:通过捆绑脚本生成.docx

bash
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:
json
{
  "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 fallback
  • Title page, intro with Consensus link, learning outcomes box, numbered papers per section
  • ExternalHyperlink
    with full Consensus URLs (never truncated)
  • LevelFormat.BULLET
    for lists (not unicode bullets)
  • Footer with generation metadata
  • Input validation (missing fields → graceful error)
See
references/bundled_script_pattern.md
for why bundled vs inline.
bash
node ../scripts/generate_reading_list.js \
  --input /tmp/syllabus_data.json \
  --output /path/to/reading_list_<course>_<date>.docx
脚本接受符合以下Schema的JSON:
json
{
  "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": []
  }
}
脚本负责:
  • docx
    包的引入及多位置 fallback
  • 标题页、带Consensus链接的引言、学习目标框、各板块编号论文
  • 包含完整Consensus URL的
    ExternalHyperlink
    (绝不截断)
  • 使用
    LevelFormat.BULLET
    作为列表格式(而非Unicode项目符号)
  • 包含生成元数据的页脚
  • 输入验证(缺失字段→优雅报错)
参考
references/bundled_script_pattern.md
了解捆绑脚本优于内联代码的原因。

Phase 6: Deliver

阶段6:交付

  • File path
  • Audit summary in chat: "Saved {file}. {N} sections × {M} papers / {K} cited. Plan tier: {tier}."
  • Validate:
    python scripts/office/validate.py <docx>
  • 文件路径
  • 聊天中的审核摘要:"已保存{file}。{N}个板块 × {M}篇论文 / {K}篇被引用。计划层级:{tier}。"
  • 验证:
    python scripts/office/validate.py <docx>

Tooling

工具列表

ScriptRole
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
脚本作用
scripts/citation_tracker.py
Consensus三项计数审核 + 每秒1次的顺序执行控制,数据存储于
~/.syllabus_sessions/<session>.json
scripts/topic_grouper.py
根据提取的主题进行启发式分组,生成6-12个板块
scripts/discussion_question_validator.py
布鲁姆高阶问题质量检查;标记仅考察回忆的问题
scripts/generate_reading_list.js
捆绑式Node.js DOCX生成器 — JSON输入 → .docx输出

References

参考文档

  • 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)
  • references/applied_domain_weaving.md
    — 搜索质量规范(7+来源)
  • references/audience_calibration.md
    — 本科vs研究生摘要术语规范(7+来源)
  • references/bundled_script_pattern.md
    — 捆绑脚本优于内联代码的原因(7+来源)

Error Handling

错误处理

FailureBehavior
Consensus rate-limit hitWait 3s, retry once, log
Search returns 0 for a sectionNote section as "limited results — consider manual supplementation"
3 consecutive failuresStop, alert user, share collected so far
docx
package not installed
Script attempts
npm install
; if still failing, fail with clear message
DOCX validation failsUnpack XML, log issue, ask user to retry
Syllabus format unsupportedList supported formats, ask user to convert
Learning outcomes can't be extractedInfer 3-5 from course description; mark as inferred in document
故障处理方式
触发Consensus速率限制等待3秒,重试1次,记录日志
某板块搜索返回0结果标记该板块为"结果有限——建议手动补充"
连续3次失败停止操作,通知用户,分享已收集的内容
未安装
docx
脚本尝试执行
npm install
;若仍失败,返回清晰报错信息
DOCX验证失败解压XML,记录问题,请求用户重试
不支持的大纲格式列出支持的格式,请求用户转换
无法提取学习目标从课程描述中推断3-5项;在文档中标记为推断内容

Anti-Patterns To Reject

需避免的反模式

  • Parallelizing Consensus calls (rate limit)
  • Searching topics without applied-domain angle (poor relevance)
  • Padding sections with fabricated entries when Consensus returns thin
  • Generic discussion questions ("What did the authors find?")
  • Jargon-heavy summaries unsuitable for the course's audience level
  • Skipping the group-and-confirm step (wastes searches)
  • Truncating Consensus URLs in hyperlinks
  • Inlining 300 lines of docx-generation JavaScript in the skill body (use bundled script)

Version: 1.0.0 Source spec:
megaprompts/10-syllabus-megaprompt.md
Build pattern: Path B (direct conversion). Bundled-JS-DOCX-generator variant.
  • 并行调用Consensus(触发速率限制)
  • 未融合应用领域角度的主题搜索(相关性差)
  • Consensus返回结果稀少时编造内容填充板块
  • 通用讨论题(如"作者发现了什么?")
  • 不符合课程受众水平的术语密集型摘要
  • 跳过分组确认步骤(浪费搜索资源)
  • 在超链接中截断Consensus URL
  • 在技能主体中内联300多行docx生成JavaScript代码(使用捆绑脚本)

版本: 1.0.0 源规范:
megaprompts/10-syllabus-megaprompt.md
构建模式: 路径B(直接转换)。捆绑式JS-DOCX生成器变体。