Skip to content
Back to skills

course-helper

ASecurity

课程学习资料整理与习题解答方法:把讲义、课件、PDF 整理成复习大纲,解答习题,生成公式速查表与易错辨析;并维护跨会话的教学交接文档(学习进度)、管理项目提示词库、按模块拆分项目资料档案(B 层)。当用户在课程学习类项目中要求整理讲义或课件、编写或续写复习大纲、讲解课程概念、解答作业题(HW/习题)、续写学习进度或教学交接文档、登记常用提示词时使用。不适用于纯代码工程项目。

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 22, 2026
ai-agents

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned October 22, 2026

npx -y skills add xxxhhhccc458/course-helper --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of course-helper?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for course-helper
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/xxxhhhccc458-course-helper/badge)](https://www.skillsdirectory.com/skills/xxxhhhccc458-course-helper)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: course-helper
description: 课程学习资料整理与习题解答方法:把讲义、课件、PDF 整理成复习大纲,解答习题,生成公式速查表与易错辨析;并维护跨会话的教学交接文档(学习进度)、管理项目提示词库、按模块拆分项目资料档案(B 层)。当用户在课程学习类项目中要求整理讲义或课件、编写或续写复习大纲、讲解课程概念、解答作业题(HW/习题)、续写学习进度或教学交接文档、登记常用提示词时使用。不适用于纯代码工程项目。
---

# 课程资料整理与习题解答方法(A 层 · 通用)

> 本 skill 只含**可迁移的方法**。项目事实(资料在哪、编号怎么定、什么不考、提示词库内容)
> 一律放在 `<当前会话工作区根目录>/.dsh/skills/course-notes-profile/`(下称 **B 层**)。
> B 层的「取舍特例」优先级高于本文件的通用判据。
> **不要**再把 B 层写成平铺文件 `<工作区根目录>/.dsh/course-notes-profile.md`:
> 那个位置 DSH 不扫描,skill-manager 插件还会报「缺少完整 YAML frontmatter」。

## 0 开工规程(每次任务都要执行)

1. 读 `<工作区根目录>/.dsh/skills/course-notes-profile/SKILL.md`。它是 **B 层索引**,含模块路由表。
2. **按需加载模块**:只读与本次任务相关的模块文件,**不要一次读完整个 B 层**。常见对应:
   - 整理大纲 / 讲概念 → `资料源.md` + `取舍.md` + 定位与记号模块
   - 解答习题 / 定位原题 → `定位.md`
   - 续写进度 / 交接 → `产物.md`(进度文档位置与模板)+ 第 11 节
   - **进度文档不存在**(或用户说「不知道学到哪」)→ 按第 11.2 节的三轮访谈重建,**不得凭一句话直接生成**
   - 调用或登记提示词 → `提示词.md` + 第 12 节
3. **不存在** → 先执行第 1 节「初始化 B 层」,生成后交用户确认,再开始正题。
4. **只找得到旧路径** `<工作区根目录>/.dsh/course-notes-profile.md` → 先按第 15 节迁移成标准目录包,删掉旧文件,再继续。
5. **是单文件 B 层,但已触发第 13 节的拆分阈值** → 按第 13 节拆分,内容不丢。
6. **存在,但资料源可能已变** → 只重扫资料源模块里的清单,其余不动。
7. B 层与本文件冲突时,**以 B 层为准**。
8. **B 层声明的产物缺失时,要主动报**:若 `产物.md` 写了某产物的落盘位置而文件不存在(典型是进度文档),**任何任务**开工时都必须主动告知并提议初始化,**不得等用户专门要求**。

## 1 初始化 B 层(新项目首次使用)

B 层落盘位置固定为**技能目录包**,不是单个散落的 md:

```
<工作区根目录>/.dsh/skills/course-notes-profile/
├── SKILL.md          ← 唯一带 frontmatter 的索引
├── 资料源.md
├── 定位.md
├── 取舍.md
├── 产物.md
└── 提示词.md
```

勘查,不要凭空写:

1. 列出项目根目录结构,识别资料源(讲义 / 课件 / 教材 / 作业 / 数据 / 既有笔记 / 既有进度文档)
2. 统计每个资料目录的文件数与类型;**会新增文件的目录只记通配符,不记清单**
3. 打开 1–2 个既有产物,反推用户已认可的规范;没有产物就跳过,不要编
4. 抽 1 份 PDF 试提取文字,记录可读性(正常 / 乱码 / 无文本层)
5. 抽查特殊文件:CSV 是否带 BOM、PPTX 能否解析、`.venv` 里是否缺 pymupdf 之类
6. 按第 10 节模板写出 B 层,索引**开头必须带 frontmatter**(`name` + `description`),正文**逐条标注证据来源**;查不到的一律留空并写「待确认」
7. 小项目可先写单文件(第 13 节阈值内),大项目直接按模块拆
8. 交用户确认后才算完成

写完后在 skill-manager 面板核对:应出现在「项目技能 → Project DSH」下且**可启用/停用**。
若提示「缺少完整 YAML frontmatter」,是 frontmatter 没写对,见第 15 节。

## 2 资料清单:现场扫描,永不写死

- 写死清单 = 新增文件永远不会被看到。凡是「以后还会加文件」的目录,B 层只记**通配符 + 刷新规则**。
- 每次任务开始时重新扫描并现场生成对照表,旧表作废。

## 3 内容取舍(本文件最重要的一条)

**判据:这段内容会不会出现在任何一道题的题干或解答里?不会,就不进正文。**

| 写进正文 | 不进正文(或压成一行) |
|---|---|
| 定义、判定条件、计算公式 | 软件/编程实现(除非 B 层声明本课程考它) |
| 定理及其成立前提 | 人物生平、学派故事 |
| 典型题型与解题模板 | 发展史叙事、与考点无关的工程背景 |
| 易错点、反例、概念辨析 | 示例性代码与输出截图 |

- 资料里写了但明显不考的 → **剔除**,最多留一句「另附 ××,略」
- 拿不准 → 保留但压成一行,不展开推导
- **一致性服从取舍**:旧产物里已有的不考内容,不要为了「保持一致」继续复制

## 4 忠实与纠错

1. 按资料原有目录结构与编号组织,不重排、不合并、不擅自「优化」编号
2. 资料自身编号冲突 → 原样保留,开头加 `> ⚠️ **编号说明**`
3. 发现笔误或条件自相矛盾 → 不改原意,收进「勘误」节并在正文对应处提示;若该错题本身有教学价值,写明可复用的检验方法
4. 手写批注不作为内容来源,只收录印刷体正文与例题解答
5. **不编造**资料里没有的定理、例题、数据;确需补充课外内容,标注「补充」并说明理由

## 5 输出骨架(整理大纲时)

1. 标题 `# <课程名> · <文档名>`
2. 三行前置说明:**资料来源** / **覆盖范围** / **整理原则**
3. 资料清单表(现场扫描结果)
4. 核心知识脉络速览:放进围栏代码块(语言标记 `text`),两空格缩进,`└` 表示从属
5. 正文层级:`# 第X章` → `## X.Y` → `### X.Y.Z`
6. 附录:**A** 公式速查表 / **B** 概念辨析与记忆表 / **C** 常见题型与解题模板(以上必写);**D** 勘误与提示 / **E** 图表说明(可选)
7. 末尾一行 `> **复习建议**:…`,指出重点与使用路径

## 6 每节微格式

- 标题下紧跟溯源行:`` > 对应 `文件名` 第 a–b 页 ``
- 用 `**一、定义**`、`**二、…**` 中文序号分块,块名点明该块作用
- 独立公式 `$$…$$` 单独成行;行内符号用 Unicode(Ω、σ²、Φ、λ、≤、∪、∩、Ā、⌊⌋)
- 记号全文统一,以 B 层记号表为准
- 例题给**完整解答**,不只给答案;定理证明分写「证明(充分性)」「证明(必要性)」
- 节末固定 `**📌 补充与易错提醒**`,条目式,然后 `---`

## 7 习题解答规范

1. **先给答案,再给步骤**;开头一行写 `**考查点**:…(对应 X.Y)`
2. 按 B 层的编号约定回查原题,确认题干与已知条件,不凭记忆改写
3. 判类型 → 套模板(见附录 C)→ 完整推导 → **回代检验**(单调性 / 归一性 / 端点 / 量纲)
4. 多小问分别作答,标明 (1)(2)
5. 条件不足或自相矛盾要**指出来**,不硬凑答案
6. 不省略中间步骤,不写「显然」「易得」
7. 有典型坑时,末尾补一句「易错点」

## 8 记号与排版

- 人名首次出现:外文原名(中文译名)
- 书名:*斜体原文* + **加粗中译名** + 年份
- 表格内公式含竖线必须转义为 `\|`(如 `P(A\|B)`)
- 概念辨析优先用「**A vs B**:前者…,后者…」句式

## 9 禁止

- 不整本读大部头教材,按需定位页码
- 不把旧产物当内容规范
- 不写考不到的内容
- 不省略解答步骤
- 不用「一般来说」「大致」代替精确公式
- 不新增资料里没有的编号
- **不把 B 层写成平铺的 `.dsh/course-notes-profile.md`**,也不要写没有 frontmatter 的 SKILL.md
- **不凭压缩摘要或记忆复述项目结构**:目录名、文件数一律现场 `ls` 核实后再写进产物
- 不在 B 层子模块里再放 frontmatter 或 `SKILL.md`(插件不递归扫描,等于失联)

## 10 B 层模板(初始化时照此生成)

### 10.1 索引 `SKILL.md`(唯一带 frontmatter 的文件)

```markdown
---
name: course-notes-profile
description: <项目名>课程项目的资料档案(B 层):记录资料源位置、编号定位约定、取舍范围、既有产物与进度文档位置、统一记号与常用提示词。在本项目整理讲义、续写大纲与学习进度、解答作业题时加载。
---

# <项目名> · 课程资料档案(B 层)
> 由 course-helper 生成。A 层方法见用户级 skill `course-helper`;本目录只记项目事实。
> B 层与 A 层冲突时以本文件为准。
> 生成日期:<YYYY-MM-DD> 资料源快照:<目录 → 文件数>

## 模块路由表

| 模块 | 负责什么 | 什么时候读 |
|---|---|---|
| `资料源.md` | 资料源地图、清单刷新命令、读取限制 | 每次开工(确认资料没变) |
| `定位.md` | 编号体系、页码口径、记号表 | 引用原文、写溯源行、统一符号 |
| `取舍.md` | 课程取舍特例、不考范围、勘误规则 | 决定某段进不进正文 |
| `产物.md` | 大纲/进度文档/习题解答的落盘位置与模板、既有产物地位 | 写任何产物之前 |
| `提示词.md` | 本项目常用提示词库 | 调用、登记、复用提示词 |

## 通用约定(模块外的最小公共集)
- 一句话项目定位:<课程名 / 性质 / 当前进度>
- 本课程「不考」的判定权归 `取舍.md`;无 `取舍.md` 时按 A 层通用判据
```

### 10.2 模块文件(无 frontmatter,标题即一级标题)

每个模块只写 A 层没写的**项目事实**,不复制 A 层方法:

- `资料源.md`:资料源地图(路径 / 类型 / 页数与文本层情况)、清单刷新命令、已知读取限制
- `定位.md`:编号约定(如 `1.24` = 讲义 1.24 节习题)、页码口径(PDF 页序 vs 印制页)、记号表
- `取舍.md`:只写与 A 层通用判据不同的例外(「本课程考 R 语言实现」「不考证明题」),以及勘误登记
- `产物.md`:各类产物写在哪、叫什么名、用哪个模板;哪些旧产物只作格式参考
- `提示词.md`:按第 12 节格式维护

## 11 进度与教学交接文档

适用于**跨多次会话持续推进**的项目。它不是复习大纲的替代品,而是「下一个接续者(人或 AI)能不能无损接手」的凭据。

### 11.1 定性与分工

| | 复习大纲 | 进度与交接文档 |
|---|---|---|
| 内容 | 知识本身(定义、定理、题型) | 状态与过程(学到哪、哪不会、怎么纠过错) |
| 读者 | 复习的人 | 下一次接手的人 / AI |
| 变化 | 随资料增补 | 每次教学都必须追加一行 |

- 落盘位置与文件名由 B 层 `产物.md` 钉死(示例:项目内 `课程ppt/学习进度.md`),A 层不规定具体路径。
- **一份项目只留一份**,不按版本分叉;历史靠「更新记录」段承载。
- 项目里**还没有**这份文档 → 不得凭印象直接写,按 11.2 的初始化访谈走完再落盘。
- **发现即报**:只要 B 层声明了该文档的位置而文件不存在,无论当前任务是写大纲、解答题还是维护档案,都要主动报一句并提议初始化。不要把「创建产物」当成用户必须单独下达的指令。

### 11.2 进度文档不存在时:初始化访谈协议

**触发**:按 B 层 `产物.md` 的路径找不到进度文档。**禁止**凭用户一句「我学到第三章了」就直接生成——那样得到的是自我感觉,不是可交接的状态。

走三轮访谈,**每轮 3–5 问,答完再进下一轮**(一次抛十几个问题,用户必然敷衍,数据就废了)。

**第 1 轮 · 客观边界**(只问事实,不问掌握度)

1. 课程名 / 教材 / 班次;老师现在讲到**哪一章哪一节**(用 B 层 `定位.md` 的编号写法,不写「第三章」)
2. 已讲完的章节清单(逐条列出,允许用户说「从 1.0 到 2.6 都讲了」)。
3. 作业 / 实验布置到哪个(编号 + 是否已交)。
4. 下次课大概讲什么(有教学日历直接要)。

→ 产出「**已讲 / 正在讲 / 未讲**」三条线。后续出题**只考已讲范围**。

**第 2 轮 · 掌握度自评**(按第 1 轮的已讲块分块,每块一问)

- 不要问「学会了吗」,要问**可判定的行为**:「这块能不能不看书把公式写出来」「这块的题你大概能不能独立做完」。
- 让用户对每块从五档图例里挑一档;挑不出就记 `⬜ 尚未学习`。
- 明确告诉用户:**这一轮的自评会被第 3 轮校准**,偏差会被写进文档。

**第 3 轮 · 知识检验(实测,3–5 题)**

出题规则:

| 维度 | 要求 |
|---|---|
| 范围 | 只从第 1 轮确认的**已讲范围**里出;考未讲内容只会得到假缺口 |
| 取材 | 只用 B 层资料源里的原题、原定理、原例子,**不编题** |
| 配比 | 基础 2 题(复述定义 / 写出公式)、中等 2 题(小计算、判断对错并说明理由)、区分 1 题(解释为什么 / 指出前提条件) |
| 优先级 | 优先考「自评 🟡 的块」与「老师反复讲的点」,不随机抽 |

判分后:**实测与自评不一致时以实测为准**,并在状态总表备注「自评偏高/偏低」。用户答「不知道」直接记 `❌ 明确缺口`,不追问。

**第 4 步 · 落盘**

- 按 11.3 九段骨架填;查不到的一律写「待确认」或 `⬜ 尚未学习`,**不编造已学内容**。
- 「更新记录」第 1 行写:`初始化(访谈 3 轮 + 检验 N 题)`。
- 薄弱点必须落到具体知识点(「向量形式求导」「Softmax 梯度」),不写「基础较差」。

**第 5 步 · 交付确认**

把「已讲清单 + 状态总表 + 后续路线」三块摘要给用户过目,**确认后才算建立**;之后转入 11.4 的增量更新。

**反模式**:一次抛十问;只问感受不问能力;考到未讲内容;边问边写(应全部收齐再写,否则反复改);把用户随口一句估算写成结论。

### 11.3 九段骨架(顺序即模板,续写时不得重排)

1. **学习目标与教学约定** —— 教学口味(要不要推导、要不要先给结论)、补充内容的标注规则
2. **已有基础与薄弱点** —— 决定后面讲多细
3. **已学内容** —— 按知识块分节,每块给关键公式与结论,不重复大纲的完整推导
4. **当前专题** —— 正在学的那一块要展开到能直接接着讲
5. **当前学习位置** —— 原文定位 → 暴露的问题 → 局限 → 能力分解
6. **学习状态记录** —— 状态总表 + 当前正在学 + 逐轮检验与纠正
7. **后续路线** —— 分阶段,标出依赖关系
8. **教学方式约定** —— 提问方式、判分方式、纠错方式
9. **更新记录** —— 表格:第几次 / 改了什么 / 结果

### 11.4 硬规则

1. 状态图例固定五档,**不改不增**:`✅ 已掌握`、`🟡 基本掌握、需练习`、`🔵 当前正在学`、`⬜ 尚未学习`、`❌ 明确缺口`
2. **每次教学结束必须**:① 追加「更新记录」一行 ② 同步改状态总表 ③ 改「当前正在学」
3. **自己的推导或判分有错 → 必须显式写「勘误」并给出验算**,不得静默修改历史记录
4. 只记录**已确认**的事实;待确认的标「待确认」,不写成结论
5. 检验仪式:每轮抛 2–3 个问题 → 书面判分 → 把纠正写回文档(不是只在对话里说)

### 11.5 迁移到其他项目时的检查项

- [ ] 是否真有「跨会话持续推进」的性质(一次性作业项目不需要这个文档)
- [ ] **新建时走过 11.2 的三轮访谈**,而不是凭「我学到第几章」直接生成
- [ ] 状态总表里「自评」与「实测」的偏差已标出
- [ ] 状态图例与本文件一致
- [ ] 更新记录记到「第几次」,可反推节奏
- [ ] 薄弱点段落到具体知识点,而非「数学不太好」这类空话

## 12 提示词库

用途:把反复使用的提示词固化,避免每次重新组织措辞。

### 12.1 存放

- **项目级**:B 层 `提示词.md`(只在当前项目有效的,如本课程特有的题型模板)
- **通用级**:确属跨项目可复用的,收进 A 层同目录的 `提示词.md`,并在 B 层留一行指针
- 两边都不许散落在正文段落里

### 12.2 单条格式

````markdown
### P-03 <一句话名称>
- **场景**:什么时候用它(触发条件,不是「很好用」这类评价)
- **变量**:`{课程名}`、`{章号}`、`{页范围}`
- **提示词**:
  ```
  原文照抄,一个字都不改
  ```
- **备注**:效果、禁忌、配套注意事项
````

### 12.3 规则

1. **原文照抄,不改写、不「优化」措辞**——用户写的提示词是资产,改写会改变行为
2. **可变部分一律抽成 `{变量}`**,并在「变量」行列出;不抽变量的提示词等于只能用一次
3. **一条一个用途**。复合提示词拆成多条并用编号引用,不要堆在一条里
4. **编号 `P-NN` 只增不改**,删掉的留 `~~P-07~~ 已废弃:原因`,便于回溯
5. 新提示词入册前先查重;语义重复的合并,并在旧条目标注「已并入 P-11」
6. 用户后续提供的提示词**原样入册**:不替他润色,只在「备注」里写观察到的问题

## 13 B 层拆分规范

### 13.1 插件行为(决定拆分边界)

skill-manager 只扫描 `.dsh/skills/` 的**顶层**:每个含 `SKILL.md` 的子目录 = 一个技能,顶层的散装 `.md` = 一个平铺技能。它**不递归**子目录。

| 做法 | 结果 |
|---|---|
| `course-notes-profile/SKILL.md` + 同目录 `资料源.md` 等 | ✅ 正常,附加文件被忽略、不报错、不误判为新技能 |
| `course-notes-profile/sub/SKILL.md` | ❌ 不被发现(嵌套失联) |
| 给子模块文件也写 frontmatter | ❌ 无意义,子文件不参与解析 |

### 13.2 何时必须拆

满足任一条就拆,否则单文件可接受:

- 索引超过 **15 KB** 或 200 行
- 需要承载**提示词库**(会持续增长)
- 产物规则 ≥ 2 类(大纲 / 进度文档 / 习题解答分别有位置与模板)
- 出现 ≥ 2 套编号或定位体系

### 13.3 拆分原则

1. **索引只做路由**:一句话项目定位 + 模块路由表 + 最小公共约定,不超过 100 行
2. **一个模块一个关注点**,模块名直接用中文短语(`资料源.md`、`取舍.md`),不加编号前缀
3. **模块之间不重复**:同一事实只写一处,别处写 `见 <模块>.md §N`
4. **模块内不写 A 层方法**,只写本项目的具体值
5. 拆分后**回归验证**:面板仍能看到该技能且可启用/停用,索引里每个模块名都真实存在

## 14 交付前自检

- [ ] 已读/已生成 B 层索引,且按需加载了对应模块(没整包读)
- [ ] B 层位于 `.dsh/skills/course-notes-profile/`,索引第 1 行是 `---`,`name`/`description` 齐全
- [ ] 索引路由表列出的模块**都真实存在**,无死链
- [ ] 子模块无 frontmatter、无嵌套 `SKILL.md`
- [ ] 资料清单是**现场扫描**出来的,不是抄来的旧表
- [ ] 每节都有溯源行
- [ ] 编号与资料一致,冲突处有 ⚠️ 说明
- [ ] **没有考不到的内容混进正文**(复核:软件实现、生平、历史叙事)
- [ ] 例题/习题都有完整解答与考查点标注
- [ ] 新增概念已进速查表;发现的笔误已进勘误节
- [ ] 若本次涉及教学推进:进度文档的「更新记录 / 状态总表 / 当前正在学」三处已同步
- [ ] 若本次用到新提示词:已按第 12 节格式入册并查重

## 15 与 skill-manager 插件的兼容要求

插件(`@michengai/dsh-skills-manager`)按 **目录包 + frontmatter** 识别技能,任一不满足就会在面板报错、且**不能启用/停用**。

| 项 | 规则 | 违反时的表现 |
|---|---|---|
| 存放路径 | `<工作区根目录>/.dsh/skills/<skill-name>/SKILL.md` | 面板里看不到该技能 |
| 目录名 | 与 frontmatter `name` **完全一致**,本项目固定 `course-notes-profile` | 名称非法 / 详情对不上 |
| 首行 | 文件第 1 行必须是 `---`,**不能有 BOM**,约第 4 行闭合 `---` | 报「缺少完整 YAML frontmatter」 |
| `name` | 必填,kebab-case:`^[a-z0-9]+(?:-[a-z0-9]+)*$`(全小写、连字符分隔) | 名称缺失 / 名称非法 |
| `description` | 必填且非空,**≤ 500 字符**,写清「什么时候该用」 | 技能不可加载 |
| 可选字段 | `whenToUse`、`metadata`、`disable-model-invocation`、`user-invocable`;本 skill 一律不用 | 配置解析异常 |
| YAML 写法 | `description` 里含 `:`、`#`、引号或全角标点时,整行用双引号包裹(插件自身也用 JSON 字符串写该字段) | 解析出错 / 简介为空 |
| 正文体积 | ≤ 256 KB | 面板拒绝保存 |
| 附加文件 | 同目录下的 `.md` 允许存在,被忽略、不影响解析 | 无影响 |
| 反例 | 平铺文件 `.dsh/course-notes-profile.md`;嵌套在子目录深处的 `**/SKILL.md` | 不被发现 |

**迁移旧 B 层**:若存在旧文件 `<工作区根目录>/.dsh/course-notes-profile.md`,
新建目录 `.dsh/skills/course-notes-profile/`,把内容移动到其中的 `SKILL.md`,
在顶部补上第 10 节所示的 frontmatter,删除旧文件(避免两份档案分叉)。
若内容较多,同时按第 13 节拆成索引 + 模块。

**验证**:`head -c 3 <工作区>/.dsh/skills/course-notes-profile/SKILL.md | xxd` 应输出 `2d2d 2d`;面板中该技能应显示为可加载、可切换。

Files in this skill

  • AGENTS.md1.3 KB
  • SKILL.md21.6 KB
  • 提示词.md9.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.