generate-mocs
v1.0.2Markdown 笔记目录生成器:扫描本地 Markdown 知识库并生成目录页、MOC、标签索引和链接关系导航。 保留论文目录、概念目录、双链导航和可选 Git 收尾能力;适用于任意 Markdown 知识库,不强制依赖特定笔记软件。
name: generate-mocs description: | Markdown 笔记目录生成器:扫描本地 Markdown 知识库并生成目录页、MOC、标签索引和链接关系导航。 保留论文目录、概念目录、双链导航和可选 Git 收尾能力;适用于任意 Markdown 知识库,不强制依赖特定笔记软件。 author: "Kiki Huang" license: "Apache-2.0" category: "utility" tags: "Markdown, MOC, 知识库, 目录生成" source: "https://github.com/huangkiki/dailypaper-skills/tree/main/skills/generate-mocs" allowed-tools: "glob, read_file, write_file, search_file_content, run_shell_command, ask_user_question"
Generate MOCs:Markdown 笔记目录生成器
适用场景
适用于以下需求:
- 更新索引
- 生成 MOC / Map of Content
- 刷新论文目录、概念目录或知识库导航页
- 为一组 Markdown 笔记生成分层目录
- 检查笔记之间的双链、标签和孤立页面
- 保存论文笔记后同步刷新目录页
输入与配置
需要确认:
| 参数 | 说明 |
|---|---|
notes_root |
要扫描的 Markdown 笔记根目录 |
paper_notes_dir |
可选;论文笔记目录 |
concepts_dir |
可选;概念笔记目录 |
daily_dir |
可选;每日推荐目录 |
output_path |
单个目录页输出路径;未指定时按模式生成多个目录页 |
mode |
按目录、按标签、按标题、按链接关系、论文库、概念库或综合模式 |
link_style |
链接格式:相对 Markdown 链接或双链格式,默认按已有文件风格推断 |
overwrite |
输出文件已存在时是否覆盖,默认先询问 |
git_commit / git_push |
默认关闭,用户明确授权后才执行 |
如果用户没有指定路径,先询问要扫描哪个目录。
工作流程
1. 扫描笔记
使用 glob 查找 Markdown 文件,排除:
- 依赖目录和构建产物
- 隐藏缓存目录
- 临时文件
- 用户指定排除的目录
- 本次即将生成的目录页,避免自引用噪声
2. 提取元数据
对每个 Markdown 文件提取:
- 一级标题
- YAML frontmatter 中的
title、tags、date、created、year、venue等字段 - 文件相对路径
- 内部链接:
[[...]]或普通 Markdown 链接 - 摘要:优先取 frontmatter description,其次取开头短段落
- 论文特有信息:作者、年份、方法名、分类路径(如存在)
3. 生成目录结构
根据模式输出:
| 模式 | 输出方式 |
|---|---|
| 按目录 | 保留文件夹层级,适合项目文档和论文库 |
| 按标签 | 将相同标签聚合,适合概念库 |
| 按标题 | 按字母、拼音或时间排序 |
| 按链接关系 | 标出被引用多的核心笔记和孤立笔记 |
| 论文库 | 按领域、年份、方法名或分类路径组织论文笔记 |
| 概念库 | 按概念类别和被引用次数组织概念笔记 |
| 综合模式 | 目录树 + 标签索引 + 关键链接 + 孤立笔记 |
4. 写入目录页
默认综合模板:
# 知识库目录
## 概览
- 扫描目录:...
- Markdown 文件数:...
- 更新时间:...
## 论文笔记
- [[论文标题]] — 简短说明
## 概念索引
### 分类名
- [[概念名]] — 简短定义
## 标签索引
### tag-name
- [[笔记标题]]
## 高连接笔记
- [[笔记标题]] — 被引用 N 次
## 孤立笔记
- [[笔记标题]]
## 解析失败
- `path` — 原因
写入前如果目标文件已存在,除非用户明确允许覆盖,否则先询问。
5. 知识库一致性检查
生成目录时同时检查:
- 链接指向不存在的笔记
- 没有被任何文件引用的孤立笔记
- 重复标题或重复方法名
- frontmatter 解析失败的文件
- 论文笔记中提到但概念库缺失的术语
只报告问题,不自动移动或删除原始笔记。
6. Git 收尾(默认关闭)
只有用户明确启用并授权后才可执行:
- 检查
notes_root是否是 Git 仓库 - 只暂存本次生成或更新的目录页
- 创建本地提交
- 只有用户明确要求外部同步时才执行普通 push
完成报告
报告必须包含:
- 扫描文件数
- 生成或更新的目录页路径
- 跳过的文件或目录
- 孤立笔记数量
- 坏链接数量
- 解析失败的文件及原因
- 是否执行了可选 Git 收尾
质量标准
- 重复运行应保持稳定,不随文件系统顺序随机变化
- 链接使用相对路径或用户指定的双链格式,不能混乱
- 不删除原始笔记,不自动移动文件
- 不把临时日志写进笔记目录
- 对 frontmatter 解析失败的文件要跳过并报告,不中断整个流程
- 保留论文目录、概念目录和链接关系索引能力,不能把目录生成降级为简单文件列表
