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.md
source content

Sortspec Generator

为 Obsidian 文件夹生成 sortspec.md 排序配置文件。

输入规格

接受以下两种输入形式:

  1. 完整路径
    /Users/xxx/Notes/linux
  2. 文件夹名称
    linux
    Git 文件夹
    (需在当前工作目录下查找)

解析优先级

  1. 用户直接给出的绝对路径
  2. 用户给出的相对路径(相对于当前工作目录)
  3. 用户提到的文件夹名称(在当前目录下模糊匹配)

边界条件处理

错误场景与输出模板

场景输出模板
文件夹路径不存在
❌ 未找到目标文件夹:{路径}。请确认路径是否正确。
文件夹中没有 .md 文件
⚠️ 文件夹 "{文件夹名}" 中没有可排序的 .md 文件。
只有 1 个 .md 文件
ℹ️ 文件夹中仅有一个笔记文件,无需生成排序配置。
已存在 sortspec.md
📋 检测到已有 sortspec.md,以下是建议的新排序配置:【预览内容】\n\n是否覆盖?请确认后我将写入文件。

执行约束

IF 文件夹不存在 → 输出错误模板 → 停止
IF 文件夹内 .md 文件数 = 0 → 输出警告模板 → 停止
IF 文件夹内 .md 文件数 = 1 → 输出信息模板 → 停止
IF 已存在 sortspec.md → 输出预览 → 等待用户确认 → 确认后写入
ELSE → 输出预览 → 等待用户确认 → 确认后写入

默认行为:无论是否已存在 sortspec.md,都先生成预览内容展示给用户,等待确认后再写入文件。

工作流程

步骤 1:定位并扫描文件夹

使用 Glob 扫描目标文件夹下的所有

.md
文件:

  • 排除
    sortspec.md
    本身
  • 排除
    assets/
    文件夹
  • 排除以
    .
    开头的隐藏文件

步骤 2:分析文件内容

对每个文件,按以下硬性规则识别类型:

文件类型判定规则(按优先级从高到低匹配)

优先级类型判定条件(任一匹配即生效)
1MOC/索引文件名含
MOC
/
索引
/
目录
/
Index
/
index
(不区分大小写)
2MOC/索引(备选)正文前 80 行中 wikilink 数量 ≥ 5
3入门/安装标题/文件名含
安装
/
入门
/
教程
/
配置指南
/
快速开始
/
Getting Started
4基础概念标题/文件名含
基础
/
概念
/
原理
/
是什么
/
简介
/
Introduction
5进阶/高级标题/文件名含
进阶
/
高级
/
深入
/
优化
/
最佳实践
/
Advanced
6故障排查标题/文件名含
问题
/
排查
/
错误
/
解决
/
FAQ
/
Troubleshooting
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:输出与写入

  1. 先输出预览:展示生成的 sortspec.md 内容
  2. 检查是否已存在 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

注意事项

  1. 保持配置简洁,不添加注释或额外说明
  2. MOC 判定优先级最高,确保索引文件始终置顶
  3. 无法识别类型的文件放入"其他"类别,按字母排序