Study Pack(学习包)
为单一课程创建四个相互关联的页面,所有页面均由工具包(位于 github.com/CAFEERON21br18/claude-skills 的 kit/ 目录,具体文件夹为 study-pack/kit)构建:
- Sílabo(教学大纲):编号的主题列表,仅包含最核心的内容。
- Resumo(摘要):完整的课程内容,包含详尽的解释和每个主题 ≥ 3 个的解答示例。
- Revisão(复习):包含简短的课程讲解和练习(你的/用户的)、评分、历史记录、笔记和辅导。
- Plano(计划,可选):定制的备考计划,包含截止日期、图表和进度标记。
规则零:工具包决定外观,你只需编写内容
- 所有页面均由
kit/build.py生成。永远不要手动编写或修改页面的HTML、CSS或JS,也不要“改进”布局或添加页面专属样式。相同的选项 ⇒ 相同的页面,无论课程是什么(CDI, AL, LP…)。 - 你只需要编写
kit/SCHEMA.md中描述的JSON数据(使用Python的json.dump),然后构建、检查并发布。 - 题目始终使用
kit/questions.py中的表单,保持其顺序和格式。永远不要重新措辞、重新排序、拆分或换一种方式提问。永远不要在未列出颜色时仅列出主题名称。 - 如果某项功能无法通过工具包实现,在最终消息中用一句话说明。不要在HTML中绕开限制。
工具包为你固定以下内容(不要重新实现):页眉(CDI布局:左侧是课程名称和标题,右侧是4个学习包标签,第二行是工具:倒计时 · 页面工具 · As minhas notas · 深色/浅色切换按钮,使用 ruben-bonanni-ribeiro.dev 的太阳/月亮图标)、主题侧边栏、嵌入字体的KaTeX、宽数学公式适配、笔记、辅导聊天、图形计算器、专注模式、按日历天数显示的倒计时、同标签链接、手机布局和本地存储。
每个页面的工具(固定顺序,关闭的选项不显示):
| 页面 | 页眉工具 | 页眉下方工具条 |
|---|---|---|
| Sílabo | 倒计时 · 专注 · 我的笔记 · ☾/☀ | — |
| Resumo | 倒计时 · 计算器 · 专注 · 我的笔记 · ☾/☀ | — |
| Revisão | 倒计时 · 计算器 · 专注 · 仅错题 · 历史记录 · 我的笔记 · ☾/☀ | 已完成 / 正确 / 待复习 + 已保存 |
| Plano | 倒计时 · 今天 · 隐藏已完成 · ☾/☀ | 已完成的学习时段 + 小时数 |
步骤 0 — 工具包及检查是否已存在学习包
- 每次都获取工具包(它可能已更新):
git clone --depth 1 https://github.com/CAFEERON21br18/claude-skills /tmp/sp && cp -r /tmp/sp/study-pack/kit ./kit阅读kit/SCHEMA.md。 - 列出用户的工件(
Artifact列表,范围“all”,限制 200),查找“Sílabo/Syllabus/Programa — <课程>”、“Resumo — <课程>”、“Revisão/Revision — <课程>”、“Plano — <课程>”或类似的名称。 - 找到 → 直接问一次:“已存在 <课程> 的学习包。是要更新还是创建新的?”(更新已有(推荐)· 创建新的)。如果选择更新:“需要更改什么?”(合并新资料 · 更改选项 · 补充缺失页面 · 重新生成练习)。 名称不明确 → 列出最匹配的选项,并询问用户选择哪个,同时提供“都不对,从头开始”的选项。 未找到 → 静默继续。
更新模式
- 立即在这一步中,使用
Artifactaction:"read"不带path参数读取每个现有页面的完整内容。如果发布时未读取完整版本,则会被拒绝。大文档会以保存文件的形式返回:每次读取大约 150–200 行,直到读完为止。然后也保存每个页面的 HTML(使用read和path:"index.html"),供extract.py使用。 python3 kit/extract.py pack <saved pages…>从工具包页面重建pack/目录(包含 pack.json、topics、plan.json)。保留slug、storage、urls、主题编号和练习ID的原始值。- 旧版学习包(无工具包数据):从页面中推断设置(主题、字体、语言、功能、数量)并写入
pack.json。将其存储键复制到"storage"中,以便保留学习进度:localStorage键(例如cdi-revisao-v1、lp-revision-v2)放在storage.ls.revisao中,数据库文档名称(例如revisao、lp-revision-v2)放在storage.docs.revisao中,plano和主题前缀同理。 - 练习:同一练习(同一张练习卷 + 编号)保留其ID;新练习按顺序分配下一个编号。对已删除练习的尝试记录会显示为“旧版本的练习”:在最终消息中说明。
- 保留计划:永远不要移动带有日期的任务区段(进度标记按日期 + 索引键控);只更新文本、计数和链接。从头重建的计划会丢失旧的任务标记:在最终消息中说明。
- 只询问用户想要更改的问题,以及新材料引发的问题(例如,如果用户上传了练习,则询问其来源)。从
pack.json中重用其他所有内容。 - 将每个页面发布到其现有
url。最后按页面说明更改了哪些内容。
步骤 1 — 收集资料(在提问之前)
- 来源:Notion页面(引用或链接,获取每个页面并跟踪课程的子页面)、上传的文件(PDF、docx、幻灯片、图片,全部读取)、粘贴的文本。如果指定了课程但未提供来源 → 搜索Notion,用一句话确认页面。
- 在Notion中搜索名称类似于 "lesson-style" 的页面(用户自己的练习格式)。如果找到,则读取它:它将成为第一个练习格式选项。
- 收集每个主题、定义、定理、方法、易错点、带解答的例题、练习及其来源(练习卷 + 编号)、考试日期,以及用户自己的练习:主题、难度、方法、解答方式(完整/部分/仅有答案/无)。
- 缺少题目内容(只有答案的练习卷):在提问之前立即用一句话说明,并要求提供PDF。永远不要自己编造题目内容。如果从用户的其他页面或答案表中重新构建了题目,则标记为
"reconstructed": true(“已重构的题目”)。 - Notion中的教科书:为每个主题块(例如 1–3、4–8、9–11)分配一个子代理并行提取。每个子代理按主题返回JSON:包含书本编号的定义和定理、易错点、≥ 4 个带步骤(操作 + 原因)和最终答案的完整工作示例;每个子代理使用 sympy 重新计算所有数字,并标记书本错误(不要静默修正)→ 使用
bookerr块(“书本中的错误”)。 - 主主题列表:按照课程顺序编号为 1、2、3…,永远不要使用字母。之后永远不要重新编号。
- 计算密集型课程(数学、物理、统计学、工程、金融)→ 显示计算器问题。
- 无法读取的来源 → 说明是哪一个,然后继续。
步骤 2 — 问题(一个固定表单)
python3 kit/questions.py --lang <pt|fr|en> [--mine] [--calc] [--lesson-style] [--exam YYYY-MM-DD](如果用户上传了自己的练习则使用--mine,如果是计算密集型课程则使用--calc,如果Notion页面存在则使用--lesson-style,如果找到了日期则使用--exam。)- 调用可视化工具
read_me(模块elicitation),然后使用完全相同的打印HTML调用show_widget,标题为study_pack_details。小部件中不要包含其他内容,不要额外提问。 - 返回的答案格式为一行(
Theme: … · Font: … · Features: … · Exercise format: … · Source: … · Per topic: … · Language: … · Graph calc: … · Tutor: … · Plan: … · Deadline: … · Hours: …)。将其映射到pack.json。 - 如果当前会话中没有可视化工具 → 按原样发送
questions.py … --text的输出(它会显示每个主题及其十六进制颜色),然后等待编号的答案。永远不要使用其他格式。 - 跳过或未回答的问题(无人值守运行时)→ 使用默认值:Focus主题、Atkinson Hyperlegible字体、侧边栏 + 专注 + 历史记录 + 进度 + 倒计时、如果找到lesson-style则使用它,否则使用多选 + 自由回答、如果用户有练习则使用50/50,否则使用用户自己的练习、每个主题5道题、对话语言、如果是计算密集型课程则启用计算器(是)、启用辅导(是)、不启用计划。说明使用了哪些默认值。
然后在构建之前:
- 来源 = 仅用户自己,并且某些主题没有用户的练习 → 立即说明是哪些主题,并询问一次:是让这些主题没有练习(并提示通知),还是仅为这些主题填补课程/Claude生成的练习。
- “其他”主题 → 复制
kit/themes.json中最接近的预设,仅更改颜色,运行python3 kit/check_contrast.py <file>直到通过,然后将该对象放入pack.json的theme中。 - 格式 → 练习类型:lesson-style = 其规则(如下);Como na fonte = 保持练习卷的形式(开放题 →
free;仅当练习卷中有多选题/判断题时才使用它们);Escolha múltipla =mcq;Resposta livre =free;V/F =tf。(填空题不由工具包支持。)
步骤 3 — 编写内容(仅JSON)
将主题分组,并使用最多4个并行子代理编写(例如 1–3、4–6、7–9、10–11)。为每个子代理提供:kit/SCHEMA.md、其主题的资料、步骤2的答案以及这些规则。每个子代理使用Python脚本(json.dump,永远不要手动编写)编写 pack/topics/<n>.json,并使用 sympy 检查所有计算。然后读取它们生成的文件,并检查它们是否符合规则。
Sílabo(syllabus):每个主题 2–6 个项目符号,每个项目符号 ≤ 12 个单词,使用名词短语/规则/公式,不要使用完整句子,不要添加无关内容。列出所有与考试相关的规则,不要编造任何内容。
Resumo(resumo + examples):每个主题的所有定义、定理、规则和方法,进行完整解释(直觉 → 正式陈述 → 何时以及如何使用),使用课程符号;使用 def / thm / formula / method / trap 块。每个主题**≥ 3 个已解答的例题**,难度从简单到考试级别,使用不同的方法:优先使用用户提供的带有解答的练习,然后是课程示例,最后是新示例。每个步骤都有 do + why(+ 学生容易出错的地方则加 trap)。来源标签:使用真实来源,或者 "new" → “新示例”。永远不要将虚构的示例标记为课程来源。当多选题被用作示例时,只保留解答步骤:省略关于选项的句子(如“选项A…”、“选项B…”、“C和D…”)。
Revisão(lesson、worked、exercises):简短的课程讲解块、一个 worked 示例,然后是练习。
练习选择:
- 仅用户自己的,全部:每个主题下所有用户的练习,不添加任何内容;没有练习的主题显示通知。仅用户自己的,N道:每个主题选择最佳的 N 道题——优先选择最符合考试要求的,然后考虑多样性(每种方法出现一次,难度从简单到考试级别,没有两道题测试完全相同的知识点);如果少于 N 道,则全部使用并加上
shortage通知。 - 50/50,全部:所有用户的练习 + 同等数量的Claude生成的练习,针对用户练习中覆盖最少的知识点进行补充。50/50,N道:一半来自用户(按上述规则选择,向上取整),一半来自Claude,风格相同。
- 你的:优先使用课程练习,然后以相同风格创建新练习。
用户提供的解答:它们是答案要点——保留其步骤和符号,解释每个步骤(操作、原因、易错点)。缺失的步骤:补全它们,并标记 by_claude: true。检查每个解答(使用 sympy 重新计算);错误的步骤永远不要静默修正:使用 flag 标记文本和修正内容。如果没有提供解答:编写一个并验证它。
lesson-style规则(当被选中时;如果Notion页面有更多规定,则以它为准):mcq 格式,准确包含 A–D 四个选项;计算题设置 gate: true(“先在纸上解答” + “我已解答 — 显示选项”)和 free_too: true(粘贴工作过程或照片,由Claude评分);数学选项每行一个(默认布局),每行单独显示;每个错误选项都代表一种典型错误,其 why 指明错误类型;正确答案的字母应变化(同一字母不要连续出现超过两次)。
文本:使用 **加粗**,永远不要使用斜体;数学公式使用 $…$ / $$…$$;当“回忆”功能开启时,使用 [[n]] 格式的引用链接。
步骤 4 — 计划(仅当 Plano = 是时)
将设置写入 pack.json 的 plan 中(开始日期 = 今天,hours:"auto" 或具体数字,busy 天包含其他考试及其备注,weights 用于重要的主题,hours_note 使用学习包的语言),然后运行 python3 kit/plan.py pack。它会打印出当时间不足时需要削减的内容:在最终消息中说明。
步骤 5 — 构建、检查、发布
python3 kit/build.py pack --out pack/out(遇到任何模式错误会停止;修正JSON,永远不要修改HTML)。python3 kit/check.py pack/out --shots必须输出 ALL CHECKS PASSED(在 400 / 1440 px 浅色和深色模式下页面无溢出,无内容被裁剪,0个KaTeX错误,无原始$符号,无JS错误,页眉和工具顺序正确,无新标签页链接,交互功能正常)。然后查看pack/out/shots/*中的截图(页眉、密集数学公式块、手机深色模式)。修正JSON,重新构建,再检查一次。- 加载
artifact-capabilities并声明页面使用了哪些功能:账户存储(db)和查看者身份(user)用于笔记、历史记录和进度标记;询问Claude(sample)用于辅导和评分(Sílabo、Resumo、Revisão)。Plano:仅使用db+user。 - 新学习包:发布4个文件(标题来自页面,图标为“book”),将4个URL放入
pack.json的urls中,重新构建,重新检查,将每个页面发布到其URL(选项卡和交叉链接需要这些URL)。更新:URL已在pack.json中;将每个页面发布到其url。
完成
仅用几行说明:构建或更新了什么(卡片会包含链接)、资料中缺少的内容、练习的来源(用户/课程/Claude编写)、被标记为错误的用户解答列表(练习 + 步骤)、计划中被削减的内容以及任何无法启用的功能(辅导、账户存储)。说明一次:公式可以以LaTeX格式复制(选中并复制,或双击公式)。不重述步骤。