# 技能索引 > 技能是"方法",不是"代码"。每个技能是一份可执行的作业指导书。 > 客观事实交给 `90-工具/kb.py`,语义判断交给技能。 ## 管库(kb-*) | 技能 | 何时用 | 核心产出 | |---|---|---| | [`course-factory`](course-factory/SKILL.md) | 任何与本库相关的操作,先过它 | 诊断 + 分流 | | [`kb-sync`](kb-sync/SKILL.md) | 有新增/变更/删除/移动 | 差异处理完毕 | | [`kb-ingest`](kb-ingest/SKILL.md) | 单个文件怎么拆页、怎么命名 | 原子化页面 | | [`kb-query`](kb-query/SKILL.md) | 查东西 | 带出处的答案 | | [`kb-lint`](kb-lint/SKILL.md) | 体检、修腐化 | 健康报告 + 修复 | | [`kb-index`](kb-index/SKILL.md) | 索引不对、要合并/拆页 | 索引正确 | ## 做课(course-*) | 技能 | 何时用 | 核心产出 | |---|---|---| | [`course-outline`](course-outline/SKILL.md) | 从零做一门课 | 需求确认 + 大纲 + 模块详案 + 缺口 | | [`course-slides`](course-slides/SKILL.md) | 大纲要变课件 | 讲师版 PPT + 备注 | ## 调用关系 ``` course-factory ← 所有请求从这里进 ├─ 要看库 → kb-query ├─ 要更新 → kb-sync ──(单个文件)──▶ kb-ingest ├─ 要维护 → kb-lint / kb-index └─ 要做课 → course-outline ──▶ course-slides ``` ## 加一个新技能 1. 在 `30-技能/` 下建目录 `xxx/`,写 `SKILL.md`(frontmatter 必须有 `name` 和 `description`,description 里带触发词) 2. 在 `90-工具/register_skills.py` 的 `SKILLS` 列表里加名字 3. 跑 `python 90-工具/register_skills.py` 4. 在 `course-factory/SKILL.md` 的分流表里加一行 5. 在上面的表格里加一行 **判断一个技能该不该建**:如果它做的事能用一段话讲清且不需要重复讲,就写进 `course-factory` 而不是建技能。技能是给"会反复执行、且有固定招式"的流程用的。