study-plan · git:20260901.401e1ec · 2026-09-01 · sha256 c99086c1c62420b8
study-plan git:20260901.401e1ecB
Immutable. This exact content is served forever at /api/v1/blob/c99086c1c62420b8.
---
name: study-plan
license: Apache-2.0 (adapted from anthropics/claude-for-legal, law-student/skills/study-plan + law-student/skills/session; complete terms in LICENSE.txt)
description:
制定/更新长期学习计划——分阶段、按薄弱程度分配学习时间、每天的学习安排,
并且根据实际练习结果自适应调整;也支持跑一次聚焦N题/N卡片的学习小节,
把结果记入计划。Use when 用户说"帮我做个学习计划""安排一下复习进度"
"这门课/这场考试该怎么复习""来10道题练一下并更新我的计划",或想知道
"今天该学什么""进度怎么样"。
metadata:
origin: 阶段划分方法(学习期/刷题期/复习期)、按薄弱程度加权分配时间、
生活约束现实性核验(强制询问)、备考课程"补充vs替代"二选一决策、
冲刺模式(临近考试<4周)、session_history 自适应调整机制,
改编自 anthropics/claude-for-legal 的 law-student/skills/study-plan 与
law-student/skills/session(Apache-2.0);已移除全部美国司法考试
(NCBE/NextGen/UBE/MBE/MEE)相关内容,替换为通用的考试/学期备考场景
---
# Skill: study-plan
坐下来学习却不知道该学什么,是几周时间悄悄溜走的常见原因。这个技能负责
搭一份计划——距考试还有几周、每天几节课、每周哪些学科、用什么方法——然后
根据用户实际完成的练习结果动态调整。是一份活的计划,不是一次性的日历
导出。
它也给 `flashcards`、`weak-point-drill`、`outline-builder` 这些技能提供
一份共享的进度记录,这样用户每次打开对话不用被反复问"今天想学什么"。
## 置信度纪律
计划是判断,不是教条。清楚标出哪些是估算:
- **每个知识点的时间估算**是一般性参考(基于典型的学习节奏),标注为
估算——用户实际的学习速度会不一样。
- **学科权重分配**来自用户自己报告的薄弱环节和实际练习记录,这部分有
把握。
- **冲刺模式下的高频考点优先级**基于"哪些内容历史上更容易考/更基础"这类
一般性经验,任何"这个肯定会考"的说法都要标 `[不确定——历史频率不是
预测]`。
## 工作流程
### 第一步:明确是为什么做计划
> 我们是为什么制定这份计划?
>
> 1. **一场具体的考试**(有明确日期,比如期末考、资格考、语言考试)
> 2. **一段学期/学习周期的整体节奏**(背诵、刷题、复习交替进行,没有单一
> 的终点考试)
按用户的回答确定锚点日期。
### 第二步:逐项收集信息,一次问一个,等回答
**逐个问,等回答。** 不要一次性把所有问题堆在一起丢给用户。
- **考试日期:** 确认了吗?
- **要覆盖的学科/知识点:** 参考大纲/教学计划,和用户确认"有没有要加/去掉
的"。
- **最擅长的学科:** 优先级最低,仍然复习,但不用重点刷题。
- **最薄弱的学科:** 优先级最高,分配更多学习小节。
- **每周能投入的小时数:** 要现实,不要理想化。"我能做20小时"和"我能连续
8周每周做20小时"是两回事,问用户实际能维持多久的强度。
- **生活约束现实性核验——必须问,不能跳过。** 用户给出小时数之后,问
(一次一个问题,不要跳):
> 你说每周[N]小时。在我搭计划之前,说说你这周还有什么安排——工作/上课
> (每周几小时)、家庭(带娃、照顾家人)、通勤、锻炼、其他占用时间的事。
> 计划应该适配你的生活,而不是反过来。一个跟不上的计划,比一个轻一点
> 但能坚持下来的计划更糟。
等用户回答,再核对这个小时数现不现实:
> 这相当于每个学习日[X]小时,算上[工作/家庭/通勤/其他]。按我的经验这
> [现实/偏紧/不现实]。要不要在我搭计划前调整一下每周小时数目标,还是
> 先按这个来,看第一周实际情况再说?
即使用户之前已经说过一个目标小时数,这一步也不能跳过——之前说的是
"想要多少",这一步核实的是"能不能坚持"。如果核实后数字更低,用更低的
数字搭计划,并在 `confidence_flags` 里记下这次调整。
如果用户拒绝聊生活细节("直接搭就行"),尊重这个选择,但加一条
`confidence_flags`:"未做生活约束核验;计划假设每周[N]小时可持续,
如果第2周结束时执行率低于[X]%,重新评估。"
- **偏好的学习方式:** 多选。刷题/论述/记忆卡片/搭大纲/定向练习/重读材料。
按用户说的实际会去做的方式来分配安排,而不是理论上最优但用户不会执行
的方式。
- **每周休息天数:** 休息日很重要。排满7/7天的计划通常撑不过第三周。
### 第二步半:如果用户在跟一门现成的备考课程/教材体系
如果用户已经在跟一套现成的备考课程(网课、教材配套计划表等),这套计划
本身就有一个逐日的安排。这个技能的计划必须在两个角色里选一个——不能在
不把用户拖垮的前提下和现成课程并行跑两套完整课程。
问一个问题,等回答:
> 你说在跟[课程/教材]的进度表。这份计划可以扮演两种角色,选一个:
>
> 1. **补充。** 现成课程是主线,这份计划只负责补:薄弱学科额外加练习、
> 定向出题、记忆卡片循环。不重建现成课程的日程表,只是叠加在上面。
> 2. **替代。** 不跟现成课程的进度表了(可能因为节奏不适合你的生活),
> 这份计划从头搭完整安排——学科、时间、阶段、日程,你放下现成的
> 进度表。
>
> 不要两个都选。两套完整课程互相打架,是很多人在第4周崩掉的原因。
等回答,记入计划:`prep_course_mode: 补充 | 替代`。
如果选**补充**:日程安排更轻——只加薄弱学科的定向练习,不重复现成课程
已经覆盖的内容。在 `confidence_flags` 里标注:"补充模式——这份计划假设
你在跟[课程]的主线进度,如果落后了告诉我,我们重新规划。"
如果选**替代**:按下面的完整流程搭计划。
如果用户没有跟任何现成课程,跳过这一步。
### 第三步:搭日程
从今天到考试日期算出剩余周数,然后:
**正常模式(距考试4周以上):**
- 按阶段划分:
- **学习期**(前~60%时间):每3-5天一个学科,搭大纲/读材料为主,
穿插记忆卡片和少量练习。
- **刷题期**(接下来~30%):加大练习量,各学科轮换,逐步接近考试
的真实条件(限时、闭卷等)。
- **复习期**(最后~10%):聚焦练习记录里显示的薄弱子知识点,做一两次
完整模拟,强项轻量回顾即可。
- 按薄弱程度分配时间:薄弱学科分到的时间大约是强项学科的2倍。
- 按天排:哪个学科、用什么方法、多长时间。给用户实际生活留出余量。
**冲刺模式(距考试不足4周):**
- 明确告知:"距考试不到4周了,这是冲刺模式——计划会优先覆盖高频/基础
内容而不是全面覆盖,会留一些盲区,这是这个阶段的取舍。"
- 二八原则:历史上更常考、更基础的内容优先分配大部分时间,冷门内容
只做最低限度覆盖。
- 每日安排:每天都有练习量(这个阶段量比什么都重要),隔天一次论述/
长题练习,每周一次完整模拟。
- 最后2-3天收尾放缓。考前一晚不要安排高强度刷题——这是真实的经验,
硬扛到考前的人分数反而更差。
### 第四步:写入计划
写入 `~/.octo/learning-data/study-plan.yaml`:
```yaml
plan_type: exam # 或 semester
exam_date: 2026-07-28
created: 2026-05-08
last_updated: 2026-05-08
weeks_to_exam: 12
hours_per_week: 25
days_per_week: 6
mode: normal # 或 cram
phases:
- name: 学习期
start: 2026-05-08
end: 2026-06-20
focus: 搭大纲、记忆卡片、入门练习
- name: 刷题期
start: 2026-06-21
end: 2026-07-18
focus: 大量练习、论述题、接近真实考试条件
- name: 复习期
start: 2026-07-19
end: 2026-07-27
focus: 薄弱子知识点回顾、完整模拟
subjects:
有机化学:
priority: high # 薄弱
weekly_hours: 5
methods: [练习题, 记忆卡片, 论述]
# ...
schedule:
- date: 2026-05-08
day: 周四
sessions:
- subject: 有机化学
method: 大纲复习
duration_min: 90
- subject: 有机化学
method: 练习题
duration_min: 60
n_questions: 25
# ...
session_history: [] # 由 flashcards / weak-point-drill / study-plan 的 session 模式追加
```
### 第五步:向用户确认
写文件前先用大白话总结(不是直接甩YAML),确认:
> 这是我搭的计划。距[考试]还有[X]周,每周[Y]小时,分[Z]天。薄弱学科
> (比如有机化学)分到2倍的时间。分三个阶段:学习期到[日期]、刷题期到
> [日期]、最后[N]天复习期。前两周已经排到每天,之后先按周分配,等你
> 实际做完小节我再填进逐日安排——这样计划会跟着你的实际进度走。
>
> 感觉合适吗?太紧还是太松?漏了哪个学科?
按回答调整,再写入文件。
## `--session <subject> <n>`:跑一次聚焦小节
用户说"来10道有机化学的题"、"做个5张卡片的小节"这类需求时用这个模式。
1. 解析学科和N。缺失就问:"哪个学科,多少题/卡片?(比如'有机化学 10'
或'合同法 5 --论述')"
2. 读取 `~/.octo/learning-data/study-plan.yaml`(如果存在),看
`session_history` 里这个学科之前哪些子主题错得多,按此加权。
3. 按方式分流:
- 练习题模式:加载 `weak-point-drill` 技能,跑N道题。
- 记忆卡片模式:加载 `flashcards` 技能,跑N张卡的 `--drill` 模式。
4. 逐题/逐卡呈现,答完给出对错解析。
5. 小节结束,写入结果:
- 如果 `study-plan.yaml` 存在:追加到 `session_history`(格式见上面
`flashcards`/`weak-point-drill` 里的示例)。
- 不存在就写到 `~/.octo/learning-data/session-history.yaml`。
6. 汇报:得分/正确率、错题子主题、这次的薄弱子主题、和之前小节的对比
(如果历史记录有2次以上)、计划接下来建议学什么。
## 计划的自适应调整
每次 `flashcards`/`weak-point-drill` 的小节结束后,结果会追加到
`session_history`。下次运行 `study-plan`(或任何技能检测到计划该更新了)
时:
- 得分持续偏低的学科,在 `priority`/`weekly_hours` 里往上调。
- 学科内部的薄弱子主题,标记为下次该学科小节的重点。
- 如果用户进度落后于计划(该完成的小节没出现在历史记录里),调整:
压缩覆盖范围,或者标出差距直接问用户。
- 如果用户进度超前,腾出时间给薄弱学科做更深入的练习。
## 模式
`--build`(默认,没有计划时)——从头搭一份新计划
`--update`(默认,已有计划时)——重读 `session_history`,调整权重,
填入接下来的逐日安排
`--status`——今天/本周该学什么,得分趋势,哪些学科在掉队
`--cram`——即使距考试超过4周,也强制切冲刺模式(用户主动要求时用)
## 这个技能不做的事
- **保证考出好成绩。** 计划是脚手架,具体执行在用户自己。
- **预测考试内容。** 冲刺模式的高频优先级基于历史经验,历史上常考不等于
这次一定考。
- **替代用户已经在跟的现成课程节奏。** 如果在跟一套现成的备考课程,这份
计划可以补充,不要两套完整课程互相打架。
- **替用户安排生活。** 每周能投入的时间是用户自己说的。如果高估了,
计划会在第2周就跟不上——生活约束核验就是为了防止这个。