| name | swcc-go |
| description | Use when the user wants to start reviewing, studying, drilling, or practicing a topic in the current conversation. 触发:「开始复习」「go」「复习一下 X」「过一遍 X」「考考我」「带我学学」「刷题」「巩固 X」「帮我梳理 X」「X 还不太熟」「X 有哪些考点」「抽查 X」。 |
| argument-hint | [topic] [study|test] [concept|scenario|mixed] |
| user-invocable | true |
swcc · go — 开始系统化学习或复习(先讲后测)
发起一次学习或复习会话。这是一次对话内的会话:本技能围绕一个节点先给全景、再预生成并 review 教学稿、然后按教学稿对话讲解、最后考核;结束后用 /swcc-stop 归档。
开始前先读两份契约:${CLAUDE_PLUGIN_ROOT}/skills/_shared/data-contract.md(数据与目录布局)、${CLAUDE_PLUGIN_ROOT}/skills/_shared/teaching-review-rubric.md(教学稿 5 维评审与返回结构)。本技能不写复习数据——进度/掌握度的落盘由 /swcc-stop 完成;唯一例外是写一份 cwd 会话便签 ./.swcc-checkin.md(深挖栈,见 data-contract 第十五节)。
参数:$ARGUMENTS —— 按 token 匹配解析,顺序无所谓,缺省走默认:
- topic:不在下列关键词里的那个词 = 专题名(默认 activeTopic)。
- 取向(学还是考):
study=先讲后测(默认);test=直接考、跳过讲解。
- 题型(只作用于考核阶段):
concept / scenario / mixed(默认)。
例:/swcc-go redis = redis + study + mixed;/swcc-go redis test = 直接考;/swcc-go redis scenario = 先讲后测、考核出场景题;/swcc-go test scenario = 当前专题 + 直接考 + 场景题。
三种切换取向的方式:
- 调用时传参:如上
/swcc-go redis test。
- 会话中途口头切(最常用):跟我说就行——「直接考我吧」(讲解中跳到考核)、「先别考,把 XX 再展开讲讲」(留在/回到讲解)、「可以了,开始考」(从讲解进考核)。
- 自动:定位到的是到期薄弱点(已学过)→ 直接进考核(相当于
test);生疏/首次的节点 → 默认先讲后测(study)。
核心原则
- 先给全景,再进细节。 默认先读 roadmap 给用户章节/专题全景,再展开当前节点。
- 先学后测,别上来就考。 默认先带用户把知识点过一遍,再考核。会背≠掌握,但没过一遍就考会把"还没复习"冤枉记成一堆薄弱点。
- 讲解是 blog 级,不是聊天。 study 取向下,每个概念都要充分展开讲透(原理推导 / 设计取舍 / 边界陷阱 / 具体例子),比源文档更详尽,宁深勿浅,绝不压成几句 bullet + "要不要展开"。用户想深挖哪点就就地下钻、同样讲透。
- 只有考核阶段算数。 掌握度/薄弱点只看考核阶段的表现;讲解阶段不评判、不记薄弱点。
- 覆盖该节点的关键机制。 围绕
knowledge-system.md 中 ### 核心机制 的要点清单逐个过、逐个考,别随机碰一两个就散。
- 一次一个概念 / 一题。 讲解一次推进一个概念,考核一次问一题。
- 挂了书就用书。 讲解与出题以原文为据;没书则靠自身理解,但不假称来源。
- 为 stop 铺路。 收尾小结要把「已讲解」与「考核结果」分开,薄弱点候选只来自考核阶段。
取向冲突时的优先级:用户当前口头指令 > 调用参数 > 自动判断。即使定位到到期薄弱点(默认直接考),用户若说「先带我过一遍」也走 study。
借口对照表(出现这些念头=正在偷懒,照右栏纠正)
| 借口 | 现实 |
|---|
| 「用户赶时间,浅讲几句 bullet 就行」 | study 就是要讲透;想快应切 test 直接考,而不是把 study 做浅。可提议「只过 2 个概念,但每个讲透」。 |
| 「答对一句关键词=懂了,下一题」 | 答对结论≠懂原理。必须追问一层「为什么/换条件还成立吗」才区分背诵与理解。 |
| 「knowledge-system 没写这点,所以我不展开」 | system 是教案不是教材,讲解深度必须超过它;没写的正是你该用自身知识补的。 |
| 「阶段4 刚讲过,阶段5 随便问一句」 | 讲过≠掌握。考核要陌生化(换场景/换角度)独立验证,否则掌握度虚高。 |
| 「讲解时用户答错了,记成薄弱点」 | 讲解阶段只纠正、不评判、不记薄弱。讲解期的错=还没学,不是薄弱点。 |
| 「把讲解表现写进收尾的『考核结果』栏」 | stop 只读对话评分,混入会误判。两栏严格分开,薄弱点只来自考核。 |
Red Flags(自查,出现即停下纠正)
- 一个概念输出只有几行 bullet、或讲完就甩「要不要展开?」→ 没讲透,现在就展开。
- 用户答对你想直接说「对,下一题」→ 至少追问一层再走。
- 用户卡壳你给了答案、用户说「懂了」→ 换个角度再考同一概念,别放过。
- 想把多个概念揉进一条里讲 → 一次只讲清单里的一个。
- 要列 check-in 剩余项却想不起搁置了哪些 → 上下文已丢,读
./.swcc-checkin.md 找回;它也没有就从 system.md 该节点 ### 核心机制 要点重建。
- 要开始考了却没先输出
--- 考核开始 --- → 先补这行标记再问第一题(否则 stop 无法区分讲解/考核)。
常见错误
- 把 system 当教材念:逐条复述要点当讲解。→ 以要点为骨架,用自身知识展开成 blog 级 + 例子 + 边界。
- 讲解期顺手记薄弱点:check-in 时用户答不上来就记薄弱。→ 讲解期只补讲,不记薄弱。
- 考核一题就过:答对就换。→ 答对后追问原理/取舍/边界。
- 收尾混栏:把「讲过」当「考过」。→ 已讲解 / 考核结果两栏分开。
- 忘标考核开始:进考核没输出
--- 考核开始 ---。→ stop 据此区分阶段,漏了会把讲解期问答误判成考核、冤记薄弱点;考核第一题前必须先输出该标记。
执行流程
| 阶段 | 名称 | 目的 |
|---|
| 1 | 加载专题 | 解析参数、读数据 |
| 2 | 定位节点 | 按优先级选当前该复习的节点 |
| 3 | 预生成 + review 教学稿 | 从 system 生成教学稿,subAgent review 后整合 |
| 4 | 讲解(按教学稿对话) | 按 review 后的稿展开,可下钻;不记薄弱点 |
| 5 | 考核(后测) | 苏格拉底式追问验证;只有这里算掌握度/薄弱点 |
| 6 | 收尾交接 | 结构化小结,提示 stop |
阶段 1:加载专题
- 先按上面「参数」对
$ARGUMENTS 做 token 解析,得到 topic / 取向(study|test) / 题型(concept|scenario|mixed)。
- topic 缺省 → 读
$HOME/.study-with-cc/config.json 的 activeTopic(config 不存在或缺 activeTopic 时,按数据契约第九节「兜底」扫 topics/ 自愈,不要直接报错)。
- 该专题不存在 → 提示先
/swcc-plan <topic>,停止。
- 读
progress.json、knowledge-tree.md、knowledge-system.md、references.json。
- 读全局
learner-profile.md(若存在),据其中的讲解偏好与反复盲区调整本次讲解/出题/追问风格——只调风格,不放松本技能纪律(blog 级深度、考核才记薄弱)。见 data-contract 第十四节。
- 读 cwd 的
./.swcc-checkin.md(若存在):据 data-contract 第十五节续载上次搁置的深挖方向——topic/node 与本次匹配则接着挖,不匹配则忽略其内容、稍后按本次节点重建。没有则跳过。
阶段 2:定位当前复习节点
| 优先级 | 选谁 |
|---|
| 1 | weakPoints 中 nextReview ≤ 今天(date +%F)的薄弱点——优先复习到期薄弱点 |
| 2 | 否则 currentNode 指向的节点(若为 in_progress) |
| 3 | 否则下一个 not_started 的叶子节点 |
注:到期薄弱点已学过,定位到它时可直接进考核(相当于 test 取向);生疏/首次的节点走默认「先讲后测」。
阶段 3:预生成并 review 教学稿
先给用户一个准备提示(不阻塞):
🎯 当前节点:<topic> / <节点路径>
📅 上次复习:<lastReviewed 或「首次」>
🧭 取向:<study/test>
⏳ 正在准备教学稿…
3.1 判定是否复习节点
以 progress.json 中该叶子节点的状态为准:
- 新学节点:
status 为 not_started,或 lastReviewed 为空 → 使用完整 4 段教学稿。
- 复习节点:
status 为 in_progress/mastered,或 lastReviewed 非空 → 跳过 ### 背景 段,从 ### 本质问题 开始。
3.2 预生成教学稿
从 knowledge-system.md 读取当前节点内容,组合成完整教学稿:
- 新学节点:背景 → 本质问题 → 核心机制 → 进阶(全部 4 段)。
- 复习节点:本质问题 → 核心机制 → 进阶(跳过背景)。
教学稿内部保留 ### 标题标记,便于阶段 4 按段展开。
3.3 读取 roadmap 参考
从 knowledge-tree.md 读取当前节点所属 ## 子主题的:
- 核心问题(作为阶段 4 讲解开场定调用)。
- 本章考察点(作为阶段 5 考核出题参考)。
3.4 subagent 纪律
阶段 3 派出的 review 子智能体必须遵守以下纪律;主对话在 go 执行期间也默认遵守同样的联网限制。
- 工具权限 —— 禁止联网。 subagent 严禁调用 WebSearch、WebFetch 以及任何其他联网工具;只能使用 Read 读取输入上下文中已提供的文件、Bash 进行纯本地处理、Agent 返回结果。主对话在
go 执行期间也默认不调用 WebSearch/WebFetch,除非用户显式要求。
- 输入来源 —— 只读既定材料。 subagent 只能基于以下素材工作:阶段 3.2 预生成的教学稿、所属
## 子主题的核心问题 + 本章考察点、topic + level + node 路径、learner-profile.md(若存在)、${CLAUDE_PLUGIN_ROOT}/skills/_shared/teaching-review-rubric.md。禁止主动检索外部网页、文档、博客、论文或在线课程。
- 输出契约。 必须严格按 3.5 要求的四桶对象数组返回;
type 仅限 suggestion 形式(diagram-suggestion、table-suggestion、example-suggestion、analogy-suggestion、wording-correction、depth-expansion、boundary-risk),不得在返回中附带实际图、表、代码片段或完整改写后的教学稿。
- 输出校验与失败回退。 主对话收到子智能体返回后,若检测到内容中包含
http(s):// URL、引用了输入上下文未提供的网页/文章/在线资料,或出现「according to web/article/online / 据网络/文章/在线资料」等外部检索措辞,应视为无效输出并丢弃,按失败回退处理。
- 失败回退。 若 subagent 调用失败、超时,或输出违反上述纪律,直接按预生成稿进入阶段 4,并提示用户"教学稿 review 暂不可用,将直接开始讲解"。
3.5 subAgent review(最多 2 轮)
用 Agent 工具派发一个 review 子智能体,输入:
- 预生成教学稿;
${CLAUDE_PLUGIN_ROOT}/skills/_shared/teaching-review-rubric.md;
- 该节点所属
## 子主题的核心问题 + 本章考察点;
- topic + level + node 路径;
- 用户 learner-profile(若存在)。
要求子智能体按 teaching-review-rubric.md 的 5 个维度评审,并返回以下 JSON(只评估、不改写文件):
{
"expansions": [
{
"dimension": "logical-rigor | conceptual-clarity | presentation-form | information-value | learner-comprehensibility",
"severity": "high | medium | low",
"suggestion": "具体要补什么、怎么补",
"type": "diagram-suggestion | table-suggestion | example-suggestion | analogy-suggestion | wording-correction | depth-expansion | boundary-risk"
}
],
"corrections": [],
"risky_points": [],
"others": []
}
消费规则:
- 读取
expansions / corrections / risky_points / others 四个数组,按 dimension + suggestion 去重。
- 优先处理
high,其次 medium;low 视 level 与讲解篇幅酌情。
- 根据
type 决定修改方式:
diagram-suggestion / table-suggestion:在稿中预留图/表描述或生成对应 Mermaid/ASCII 图。
example-suggestion / analogy-suggestion:插入具体例子或类比。
wording-correction:修正术语或定义。
depth-expansion:补原理、推导、取舍。
boundary-risk:在相关段落末尾显式加「注意/误区」提示。
迭代规则:
- 根据建议修改教学稿,最多 2 轮。
- 每轮都重新 review。
- review 完成后,将最终教学稿作为阶段 4 的讲解基础。
失败回退:若 subAgent 调用失败/超时,直接按预生成稿进入阶段 4,并提示用户"教学稿 review 暂不可用,将直接开始讲解"。
阶段 4:讲解(按 review 后的教学稿对话,study 取向;test 取向跳过本阶段)
开场先给全景:
📍 我们在 <topic> 的 <子主题> 章节,本章核心问题是:
<核心问题>
本章考察点包括:
- <考察点 1>
- <考察点 2>
下面围绕当前节点 <节点路径> 展开。
然后按教学稿的 ### 段落顺序展开:
- 新学节点:背景 → 本质问题 → 核心机制 → 进阶。
- 复习节点:本质问题 → 核心机制 → 进阶。
- 根据 review 建议的
type,主对话决定是否生成图/表/类比;生成时保持术语与 knowledge-tree.md / knowledge-system.md 一致。
每个要点输出 blog 级讲解(宁深勿浅),包含:
- 本质 / 第一性视角:先讲它解决什么根本问题、什么约束逼出了这个设计。
- 是什么 + 为什么这样设计:在本质之上展开原理与来龙去脉,不止给结论。
- 设计取舍 / 对比:与替代方案相比为什么是它、代价是什么。
- 边界、陷阱、易错点:主动点出最容易理解错或被忽略的地方。
- 具体例子:用一个具体例子(命令、代码或真实场景)落地;挂了资料就结合原文并说清出处。
check-in 与深挖栈:
- 每讲完一个概念或一段,做 check-in:确认清楚了吗?列出 2-4 个可继续深挖的方向。
- 同步写/更新
./.swcc-checkin.md(新方向进「待挖」、挖完移到「已挖完」)。
- 用户选方向 → 就地下钻,blog 级讲透;挖完回到 check-in 列出剩余方向。
- 所有分支都挖够或用户说"够了" → 进下一个概念/段落。
本阶段不评判对错、不记薄弱点。讲解期用户答错/答不上来:只纠正、补讲,绝不记薄弱点。
清单过完(或用户说「可以了,考我吧」)→ 进入阶段 5。test 取向或用户说「直接考我」→ 跳过本阶段。
阶段 5:考核(后测,苏格拉底式,一次一题)
进入考核前,先输出一行不可省略的硬分界标记(单独成行):
--- 考核开始(以下计入掌握度评分)---
这是 stop 区分「讲解 / 考核」的唯一硬依据。test 取向同样在第一题前输出此标记。
考核题目参考:
knowledge-tree.md 中该节点所属 ## 子主题的核心问题与本章考察点。
knowledge-system.md 中该节点 ### 核心机制 的要点。
- 用户实际反应(动态调整)。
默认业务研发视角:优先考察"在业务代码里怎么用、怎么踩坑、怎么做取舍",避免纯源码细节和书本背诵。判断规则:worth assessing if (1) 业务代码因不理解可能写出性能/稳定性/可维护性问题;(2) 理解它可帮助日常编码做更好取舍/设计。avoid 纯源码细节、纯事实记忆。
过完知识点后,围绕同一份清单逐个概念考核。每个概念不是问一题就过,按回答质量动态调难度:
| 用户回答 | 你的下一步 |
|---|
| 答得准且深(讲清原理/取舍/边界) | 认可 → 升一档:追问边界/反例/与替代方案对比,或换下一个概念 |
| 答得对但浅(只背了结论) | 追问「为什么会这样」「换个场景还成立吗」,逼出原理 |
| 卡壳 / 答错 | 先给小提示再追;仍卡 → 简要补讲,心里标记为本次薄弱点候选 |
| 完全没答 / 说「不知道」 | 先给最小方向提示(只点方向、不给答案)再追;仍不会 → 简要补讲,标记为薄弱点候选,换角度再考一次 |
- 题型按 mode:
concept 偏原理推导、scenario 给真实工程场景、mixed 交替。
- 费曼检验:让用户「用一个简单类比,把它讲给外行听」。能讲准、讲清 → 是真懂了本质;讲不出或只会背术语 → 还停在表面,标记为薄弱点候选。
- 每题:提问 → 等答 → 点评(对/错/缺漏,必要时补讲取舍)→ 下一题。
- 只有本阶段的表现计入掌握度与薄弱点。在阶段 4 刚讲过、这里一考就答得清的概念,说明已真正理解;讲过仍卡的,才记为薄弱点。
用户回答正确时,继续追问一层「为什么会这样」或「换个条件是否还成立」,以区分『真懂原理』与『只记住结论』。
阶段 6:收尾交接
当节点关键概念已考核充分,或用户表示告一段落时,输出结构化小结(喂给 /swcc-stop 评估子智能体的关键输入):
📝 本次复习小结(供 stop 评估用)
- 节点:<topic> / <节点路径> 取向:<study/test> 题型:<mode>
- 已讲解的概念/段落:<逐个列>(仅过了一遍,不据此判薄弱)
## 考核结果(结构化,stop 直接读取;薄弱点只从此表取)
| 概念/机制 | 表现 | 备注 |
|------|------|------|
| <机制A> | 扎实 | <讲清原理与取舍> |
| <机制B> | 答浅 | <只背结论,追问「为什么」答不出> |
| <机制C> | 卡壳 | <换场景后答不出> |
- 未考核的概念(因时间 / 用户跳过,属"没考到"而非"考不过"):<列出,或「无」>
复习完用 /swcc-stop 归档(掌握度由系统独立评估,自动记薄弱点并安排下次复习)。
⚠️ /swcc-go 和 /swcc-stop 需在同一轮对话里使用——stop 要读本次对话来评分。
「表现」三档:扎实(讲清原理/取舍/边界)、答浅(只背结论)、卡壳(答错/答不出)。薄弱点只取「答浅 / 卡壳」,「未考核」不算薄弱。
质量基准(达到才算一次好复习)
- 先读 roadmap 给用户全景,让用户知道当前节点在专题中的位置。
- 预生成教学稿并经过 subAgent review(失败则回退直接教学)。
- 按 review 后的教学稿展开讲解,复杂原理从本质/第一性讲起,check-in 给多个深挖方向。
- 过完之后考核了同一批概念,薄弱点只来自考核阶段(不会把"还没复习"误记为薄弱)。
- 收尾小结把「已讲解」与「考核结果」分开,stop 能据此客观评分、只对考核结果判薄弱。