Kaoyan sortspec-generator
install
source · Clone the upstream repo
git clone https://github.com/Treasoni/kaoyan
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Treasoni/kaoyan "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/sortspec-generator" ~/.claude/skills/treasoni-kaoyan-sortspec-generator && rm -rf "$T"
manifest:
.claude/skills/sortspec-generator/SKILL.mdsource content
Sortspec Generator
为 Obsidian 文件夹生成 sortspec.md 排序配置文件。
输入规格
接受以下两种输入形式:
- 完整路径:
/Users/xxx/Notes/linux - 文件夹名称:
、linux
(需在当前工作目录下查找)Git 文件夹
解析优先级:
- 用户直接给出的绝对路径
- 用户给出的相对路径(相对于当前工作目录)
- 用户提到的文件夹名称(在当前目录下模糊匹配)
边界条件处理
错误场景与输出模板
| 场景 | 输出模板 |
|---|---|
| 文件夹路径不存在 | |
| 文件夹中没有 .md 文件 | |
| 只有 1 个 .md 文件 | |
| 已存在 sortspec.md | |
执行约束
IF 文件夹不存在 → 输出错误模板 → 停止 IF 文件夹内 .md 文件数 = 0 → 输出警告模板 → 停止 IF 文件夹内 .md 文件数 = 1 → 输出信息模板 → 停止 IF 已存在 sortspec.md → 输出预览 → 等待用户确认 → 确认后写入 ELSE → 输出预览 → 等待用户确认 → 确认后写入
默认行为:无论是否已存在 sortspec.md,都先生成预览内容展示给用户,等待确认后再写入文件。
工作流程
步骤 1:定位并扫描文件夹
使用 Glob 扫描目标文件夹下的所有
.md 文件:
- 排除
本身sortspec.md - 排除
文件夹assets/ - 排除以
开头的隐藏文件.
步骤 2:分析文件内容
对每个文件,按以下硬性规则识别类型:
文件类型判定规则(按优先级从高到低匹配)
| 优先级 | 类型 | 判定条件(任一匹配即生效) |
|---|---|---|
| 1 | MOC/索引 | 文件名含 / / / / (不区分大小写) |
| 2 | MOC/索引(备选) | 正文前 80 行中 wikilink 数量 ≥ 5 |
| 3 | 入门/安装 | 标题/文件名含 / / / / / |
| 4 | 基础概念 | 标题/文件名含 / / / / / |
| 5 | 进阶/高级 | 标题/文件名含 / / / / / |
| 6 | 故障排查 | 标题/文件名含 / / / / / |
| 7 | 其他 | 未匹配以上任何规则 |
冲突解决
- 同时命中"入门"和"MOC" → 优先判为 MOC
- 同时命中"基础"和"进阶" → 按文件名关键词出现顺序,先出现者优先
- 同时命中多个同优先级规则 → 按字母顺序排序
步骤 3:确定排序顺序
按以下优先级排列:
1. MOC/索引文件(置顶) 2. 入门/安装/教程类 3. 基础概念类 4. 进阶/高级类 5. 故障排查/问题解决类 6. 其他文件(按字母排序)
同类文件排序规则:
- 有明确依赖关系的:被依赖的在前(如"安装"在"配置"前)
- 无依赖关系的:按文件名字母顺序
步骤 4:生成 sortspec.md
标准模板(参考
/Users/zhqznc/Documents/项目/Git/sortspec.md):
--- sorting-spec: | 文件名1 文件名2 文件名3 ---
格式要求:
- 文件名不带 .md 后缀
- 每个文件名单独一行,缩进 2 个空格
- 禁止使用 Custom Sort 的规则占位语法(如 default、a-z 等)
- 只允许显式列出文件名,每行一个
- 末尾的三个短横线必须保留
步骤 5:输出与写入
- 先输出预览:展示生成的 sortspec.md 内容
- 检查是否已存在 sortspec.md
- 已存在:询问用户是否覆盖
- 不存在:直接写入
完整示例
场景 1:正常生成
用户输入:
为 /Users/xxx/Notes/linux 文件夹生成 sortspec
输出:
📋 已扫描 /Users/xxx/Notes/linux,发现 9 个笔记文件。 生成的 sortspec.md: --- sorting-spec: | linux MOC Ubuntu Server 安装教程 Ubuntu Server SSH 配置指南 Linux换源 linux磁盘相关的知识 linux的LVM管理 linux的文件权限 linux如何修改网络信息 Ubuntu curl SSL连接问题排查 --- ✅ 已写入 /Users/xxx/Notes/linux/sortspec.md
场景 2:已有 sortspec.md
用户输入:
给 linux 文件夹重新生成 sortspec
输出:
📋 检测到 /Users/xxx/Notes/linux/sortspec.md 已存在。 建议的新排序配置: --- sorting-spec: | linux MOC Ubuntu Server 安装教程 ... --- 是否覆盖现有文件?请回复"是"或"确认"继续。
场景 3:文件夹不存在
用户输入:
为 /Users/xxx/Notes/nonexistent 生成 sortspec
输出:
❌ 未找到目标文件夹:/Users/xxx/Notes/nonexistent 请确认路径是否正确,或提供有效的文件夹名称。
场景 4:没有 md 文件
用户输入:
为 assets 文件夹生成 sortspec
输出:
⚠️ 文件夹 "assets" 中没有可排序的 .md 文件。
判定规则速查表
| 类型 | 关键词(标题/文件名,不区分大小写) |
|---|---|
| MOC/索引 | MOC、索引、目录、Index |
| 入门/安装 | 安装、入门、教程、配置指南、快速开始、Getting Started |
| 基础概念 | 基础、概念、原理、是什么、简介、Introduction |
| 进阶/高级 | 进阶、高级、深入、优化、最佳实践、Advanced |
| 故障排查 | 问题、排查、错误、解决、FAQ、Troubleshooting |
注意事项
- 保持配置简洁,不添加注释或额外说明
- MOC 判定优先级最高,确保索引文件始终置顶
- 无法识别类型的文件放入"其他"类别,按字母排序