| name | navigator |
| description | 教材处理技能库的总导航(调度台)。当用户想处理某个含 markdown/ 教材目录、但不确定用哪个子技能,或想一次对同一批教材连续跑多个处理(知识图谱、核心知识点、卡片数据、课程思政等)时使用。它动态发现库内业务子技能,按用户意图或显式指定路由,全程编排代跑,跑完一个再引导是否继续跑其它。 |
总导航(navigator)
本技能是教材处理技能库 fm_textbook_ai_skills 的调度台。库内有若干业务子技能,
它们输入相同(同一个目标目录的 markdown/,文件名 textbookId_unitId_lessonId.md),
产出不同(各自写到 output/<子目录>/)。导航技能负责:发现子技能 → 按意图/自选路由
→ 全程编排代跑 → 跑完衔接下一个。
何时使用
- 用户想处理教材,但不确定该用哪个子技能。
- 用户想一次对同一批教材连续跑多个处理(如「先抽图谱,再提炼知识点」)。
- 用户泛泛地说「处理一下这批教材」「帮我把这个目录跑一下」。
核心原则(不可违背)
- 不重复子技能规则:导航不复制任何子技能的抽取规则、格式、铁律。代跑某子技能时,
完整读取该子技能的
SKILL.md 全文,一切以它为准。子技能升级了,导航无需改。
- 门禁照走:代跑的子技能若自身有开跑门禁(如 knowledge-graph-extract 的「最大层级确认」),
必须照它的要求先问用户,不得跳过。
- 各写各的目录:每个子技能产出到它自己的
output/<子目录>/,互不覆盖。
- 显式优先:用户显式点名要跑哪个,就跑哪个,不必再猜意图。
执行流程
1. 发现子技能(脚本)
python3 <导航技能目录>/scripts/discover_skills.py --format text
动态扫描库根目录下所有含 SKILL.md 的业务子技能,读出 name + description。
清单以此实时结果为准,不要凭记忆列技能——新增的子技能会自动出现,被删的不再出现。
脚本已排除导航技能自身与平台内置技能(.claude/、.cursor/ 等下的 trellis-*)。
2. 确认目标目录
确认用户要处理的目标目录(含 markdown/ 的那个)。若用户没说,问一句。
可顺带提示:产出会落到该目录的 output/<各子技能子目录>/。
3. 路由(选出要跑哪个/哪些子技能)
按下面优先级决定:
- A. 用户显式指定 → 直接选中对应子技能(可多选)。
- B. 意图清晰 → 用第 1 步发现的
description 做语义匹配,选中最合适的,跟用户确认一句再跑。
参考 references/routing-guide.md 的意图锚点。
- C. 意图不明 / 用户没头绪 → 列出发现到的技能清单(编号 + 一句话用途)让用户选,
不要替用户猜。支持用户选多个。
多选顺序跑:用户可一次选多个子技能(如「图谱 + 知识点 + 卡片」)。按用户给定或合理的顺序,
逐个编排执行,一个跑完再跑下一个。
4. 编排代跑(对每个选中的子技能)
- 完整读取该子技能的
SKILL.md(<子技能目录>/SKILL.md)。
- 照它的流程执行:先走它的开跑门禁(若有),再按它的步骤对目标目录的
markdown/ 逐课处理,
写到它规定的 output/<子目录>/,最后调它自带的校验脚本(若有)确认产出合规。
- 代跑期间,子技能 SKILL 的规则 > 导航的任何默认。导航只负责「按它说的做」。
5. 报告 + 衔接下一个
一个子技能跑完后:
- 简要报告产出(几个 lesson、落在哪个 output 目录、校验是否通过)。
- 主动询问是否继续:把「还没跑过的子技能」列出来,问用户要不要接着跑其一/其几,
或到此为止。用户说停就停。
组件
scripts/discover_skills.py — 动态发现库内业务子技能(读各 SKILL.md 的 name + description)。
references/routing-guide.md — 意图→技能的匹配锚点,与代跑注意事项。
边界
- 导航技能自己不产出教材数据,只调度子技能。真正的抽取/生成由被代跑的子技能完成。
- 导航技能不缓存子技能清单和规则——每次都实时发现、实时读取子技能 SKILL,保证不过期。