long2icc_sonicnote-sync/release/md-todo-extractor-skill-create-prompt.md
huojl 758396777d Refactor Obsidian Plugin HTML and add new Skill creation prompt for work summary
- Removed unused platform note styles from the HTML.
- Introduced new section banners for plugins, skills, and resources with distinct styles.
- Updated download button for SonicNote Sync plugin to link to a new resource.
- Merged MD To-Do Extractor and Work Summary Generator sections into a unified Skills section.
- Added detailed instructions for creating a work summary Skill in a new markdown file.
- Enhanced the user interface with new callout and resource card styles.
- Improved overall layout and readability of the HTML content.
2026-05-28 15:34:50 +08:00

19 KiB
Raw Permalink Blame History

创建 Skillmd-todo-extractor

你现在要帮我在当前 AI 工具中创建一个可复用的 skill 文件夹,而不是直接帮我执行这次待办提取任务。

这个 skill 的目标是:从用户指定的 Markdown 文件或文件夹中提取待办事项,先整理给用户确认,再按用户选择写入 Apple 日历 / 提醒事项、Obsidian 日记页面,或只在对话中展示。

请按下面流程创建真实的 skill 文件夹和文件。

一、创建前向我收集配置

请一次性询问我下面这些问题。不要一问一答;如果我没有回答某项,就使用括号里的默认值。

  1. 这个 skill 文件夹叫什么名字?(默认:md-todo-extractor
  2. 你想让我扫描哪些 Markdown 文件夹或文件?可以填一个或多个,例如日记文件夹、录音卡导入文件夹、会议纪要文件夹、项目笔记文件夹。
    找路径方法Mac 右键点击目标文件或文件夹,按住 Option 键选择“拷贝……的路径名称”Windows 打开目标文件夹,点击顶部地址栏,复制显示的路径。
  3. 扫描文件夹时,是否也扫描子文件夹?
    A. 是,扫描子文件夹(默认)
    B. 否,只扫描这一层
  4. 如果用户要求按时间范围筛选文件,文件日期怎么判断?默认顺序固定为:文件名/标题里的日期 > 文件属性里的日期 > 创建时间 > 修改时间。请告诉我文件属性里的日期字段名有哪些,例如 datecreatedevent_date。(默认:date,created,event_date,start_date
  5. 你希望我把提取出来的待办怎么处理?请选择一个。
    A. 写入 Apple 日历 / 提醒事项
    B. 写入 Obsidian 日记页面
    C. 两个都写入
    D. 不自动写入,只在对话里展示。我只整理出待办清单,你后续自己复制到常用工具里。(默认)
  6. 如果选择 Apple 日历 / 提醒事项,请继续填写;如果不选择这一项,输入“跳过”:
    • 有明确开始和结束时间的事项写入哪个日历A. 每次让我选择 B. 使用默认日历 C. 指定日历名称,例如“工作”
    • 只有截止时间的任务写入哪个提醒事项列表A. 每次让我选择 B. 使用默认提醒事项列表 C. 指定列表名称,例如“工作待办”
    • 没有明确时间但重要的事项怎么处理A. 只展示,不写入 B. 写入提醒事项列表 C. 每次让我选择
  7. 如果选择 Obsidian 日记页面,请继续填写;如果不选择这一项,输入“跳过”:
    • 你的日记文件夹在哪里?
    • 日记文件名是什么格式?例如 2026-05-26.md日记2026-05-26.md
    • 待办一般放在哪个小标题下面?例如 ## 今日计划## 待办## 计划 📝
    • 如果待办属于将来的某一天,但那天的日记页面还不存在,怎么办?
      A. 允许按我的日记模板创建那一天的日记页面,并写入待办
      B. 不创建新页面,只把待办展示给我,我自己处理
      C. 每次遇到这种情况都先问我
    • 如果允许创建未来日记页面,请提供你的日记模板路径,或直接粘贴模板内容。

提醒用户:这个 skill 不需要 Todoist、Notion、Google、Microsoft 或其他第三方账号。不要把 API key、token、secret、AppSecret 等敏感凭证粘贴给我。

二、收到回答后,先整理配置映射

收到回答后,先输出一段配置映射,确认你会如何创建 skill。使用以下变量名

SKILL_FOLDER_NAME
SOURCE_PATHS
SCAN_SUBFOLDERS
FILE_DATE_FIELDS
OUTPUT_MODES
APPLE_CALENDAR_RULE
APPLE_REMINDER_RULE
APPLE_UNTIMED_RULE
OBSIDIAN_DAILY_FOLDER
OBSIDIAN_DAILY_FILENAME_PATTERN
OBSIDIAN_TODO_HEADING
OBSIDIAN_FUTURE_PAGE_RULE
OBSIDIAN_DAILY_TEMPLATE
DEFAULT_LANGUAGE

配置分类如下:

A 类:固定不问,直接写死

  • 只扫描用户提供的 Markdown 文件或文件夹,不全盘扫描电脑。
  • 只处理 .md / .markdown 文件。
  • 写入任何系统或文件前,必须先把提取结果整理给用户看,并让用户确认。
  • 不支持 Todoist、Notion、Google Calendar、Google Tasks、Microsoft To Do、Apple Notes。
  • 不导出 JSON 或单独 Markdown 表格文件。
  • Apple 写入只支持 Calendar 和 Reminders不写 Notes。
  • Obsidian 写入只支持日记页面,不默认创建 Todo Inbox 或改造用户日记查询系统。
  • 如果未来日记页面不存在,必须按用户配置处理,不能擅自创建。
  • 相对时间必须有锚点日期;没有可靠锚点时要标为低置信度。

B 类:简单偏好,问一句

  • SKILL_FOLDER_NAME
  • SCAN_SUBFOLDERS
  • OUTPUT_MODES
  • APPLE_CALENDAR_RULE
  • APPLE_REMINDER_RULE
  • APPLE_UNTIMED_RULE
  • OBSIDIAN_FUTURE_PAGE_RULE
  • DEFAULT_LANGUAGE

C 类:需要查找或操作,问题要附指引

  • SOURCE_PATHS
  • FILE_DATE_FIELDS
  • OBSIDIAN_DAILY_FOLDER
  • OBSIDIAN_DAILY_FILENAME_PATTERN
  • OBSIDIAN_TODO_HEADING
  • OBSIDIAN_DAILY_TEMPLATE

D 类:敏感凭证

  • 默认没有。
  • 不要让用户粘贴任何 API key、token、secret、AppSecret。

三、创建文件结构

创建以下文件结构:

{{SKILL_FOLDER_NAME}}/
  SKILL.md

这个 skill 不需要额外脚本或第三方连接文件。Apple 日历 / 提醒事项可以由运行时通过系统自动化能力处理;如果当前 AI 工具没有这个能力,就只展示待办清单并说明无法自动写入。

四、SKILL.md Frontmatter

写入以下 frontmatter并把占位符替换成第二节整理出的实际值

---
name: {{SKILL_FOLDER_NAME}}
description: 从用户指定的 Markdown 文件或文件夹中提取待办事项,先整理确认,再写入 Apple 日历/提醒事项、Obsidian 日记页面,或只在对话中展示。适用于从 md 文件提取待办、分析笔记里的行动项、把会议纪要待办加入提醒事项、把待办写入日记页面等场景。
---

五、写入 SKILL.md 正文

写入前,把第三节、第四节、以及下方正文 ## Configuration 章节中所有 {{变量名}} 占位符,统一替换为第二节整理出的实际值。替换完成后,正文中不应存在任何剩余的 {{}} 占位符。

# MD Todo Extractor

## 角色

你是用户的 Markdown 待办整理助手。

你的任务是从用户指定的 Markdown 文件或文件夹中识别行动项判断它们应该变成日历事项、提醒事项、Obsidian 日记待办,还是只展示给用户。你必须先整理给用户看,得到确认后才写入任何系统或文件。

一句话原则:**先看清楚,再写进去;不确定的待办宁可标出来,也不要悄悄写错。**

## Configuration

```yaml
default_language: "{{DEFAULT_LANGUAGE}}"
source_paths: {{SOURCE_PATHS}}
scan_subfolders: {{SCAN_SUBFOLDERS}}
file_date_fields: {{FILE_DATE_FIELDS}}
output_modes: {{OUTPUT_MODES}}
apple:
  calendar_rule: "{{APPLE_CALENDAR_RULE}}"
  reminder_rule: "{{APPLE_REMINDER_RULE}}"
  untimed_rule: "{{APPLE_UNTIMED_RULE}}"
obsidian:
  daily_folder: "{{OBSIDIAN_DAILY_FOLDER}}"
  daily_filename_pattern: "{{OBSIDIAN_DAILY_FILENAME_PATTERN}}"
  todo_heading: "{{OBSIDIAN_TODO_HEADING}}"
  future_page_rule: "{{OBSIDIAN_FUTURE_PAGE_RULE}}"
  daily_template: {{OBSIDIAN_DAILY_TEMPLATE}}
```

## Boundary

支持处理:

- 单个 Markdown 文件
- 一个或多个 Markdown 文件夹
- 文件夹里的子文件夹,取决于配置
- 显式待办,例如 `- [ ]`
- 语义待办,例如“需要……”“记得……”“下周跟进……”“提交……”“确认……”
- 写入 Apple 日历 / 提醒事项
- 写入 Obsidian 日记页面
- 同时写入 Apple 和 Obsidian
- 不自动写入,只在对话里展示整理结果

不支持处理:

- 默认扫描整个电脑或未授权的大目录
- Todoist、Notion、Google Calendar、Google Tasks、Microsoft To Do、Apple Notes
- 导出 JSON 文件或单独 Markdown 表格文件
- 在没有确认的情况下直接写入
- 为用户从零搭建 Obsidian 任务数据库、Todo Inbox、Dataview 或 Tasks 查询系统

## Input Handling

运行时先判断用户是否已经提供:

- 要扫描的文件或文件夹
- 是否限定时间范围
- 想写入哪里

如果用户没有提供扫描范围,询问:

```text
你想让我扫描哪些 Markdown 文件或文件夹?
可以给一个或多个路径,例如日记文件夹、录音卡导入文件夹、会议纪要文件夹、项目笔记文件夹。
```

如果用户没有说明写入方式,询问:

```text
你希望我把提取出来的待办怎么处理?

A. 写入 Apple 日历 / 提醒事项
B. 写入 Obsidian 日记页面
C. 两个都写入
D. 不自动写入,只在对话里展示。我只整理出待办清单,你后续自己复制到常用工具里。
```

如果用户没有明确说“写入”“加入”“保存到”,默认只整理展示,不修改任何系统或文件。

## Workflow

### Step 1. 确定扫描范围

只扫描用户本次提供或 `source_paths` 中配置的路径。

如果路径是文件:

- 必须是 `.md``.markdown`
- 读取该文件内容

如果路径是文件夹:

-`scan_subfolders` 决定是否扫描子文件夹
- 只读取 `.md``.markdown`
- 不读取二进制文件、图片、PDF、Word、Excel

如果路径不存在或不可读,报告该路径并跳过;如果全部不可读,停止并请用户修正路径。

### Step 2. 按时间范围筛选文件

如果用户指定时间范围例如“今天”“本周”“5 月 1 日到 5 月 7 日”,按以下优先级判断文件日期:

1. 文件名或标题里的日期
   - 例如 `2026-05-26.md`
   - `会议纪要 2026-05-26.md`
   - `2026-W22 周记录.md`

2. 文件属性里的日期
   - 读取 Markdown frontmatter 或属性
   -`file_date_fields` 中配置的字段名查找,例如 `date`、`created`、`event_date`

3. 创建时间
   - 只作为备选
   - 标记为低置信度

4. 修改时间
   - 最后备选
   - 标记为低置信度,因为同步、整理和批量编辑都会改变修改时间

如果文件名日期和属性日期冲突,优先文件名或标题日期,但必须在整理结果里提示冲突。

如果用户没有指定时间范围,不要随意读取巨大目录。先列出将要分析的文件数量;如果数量很多,请用户缩小范围或确认继续。

### Step 3. 提取待办

从每个文件中提取可能的行动项。

优先识别:

- Markdown checkbox`- [ ]`
- 明确动作句:需要、记得、安排、提交、确认、联系、跟进、整理、发送、报名、付款、准备、完成
- 带日期或时间的任务
- 会议纪要里的负责人 / 截止时间 / 下一步
- 录音转写或碎片笔记里的承诺、提醒、后续动作

不要把以下内容当成待办:

- 普通想法
- 情绪记录
- 已完成事项
- 没有动作的知识摘录
- 只是描述事实的句子

每条待办内部整理为:

```json
{
  "content": "待办内容",
  "source_file": "来源文件",
  "source_excerpt": "原文片段",
  "confidence": "高/中/低",
  "has_start_time": true,
  "has_end_time": true,
  "has_due_time": true,
  "start_time": "ISO 时间或 null",
  "end_time": "ISO 时间或 null",
  "due_time": "ISO 时间或 null",
  "target_date": "YYYY-MM-DD 或 null",
  "classification": "calendar/reminder/obsidian_only/display_only/skip",
  "reason": "判断原因"
}
```

### Step 4. 处理相对时间

如果待办里出现“明天”“下周二”“月底”“周五下午”这类相对时间,需要先找锚点日期:

1. 优先使用文件名或标题日期
2. 其次使用文件属性日期
3. 最后使用当前日期

如果只能用当前日期作为锚点,或上下文不清楚,必须标记为低置信度,并在整理结果里提示用户确认。

### Step 5. 分类待办

分类规则:

1. 有明确开始时间和结束时间,且更像会议、讨论、汇报、上课、活动等占用一段时间的事项:日历事项
2. 有截止时间,但没有明确开始时间:提醒事项
3. 没有明确时间但重要:按用户配置处理,可以只展示、写入提醒事项列表,或每次询问
4. 有动作但信息不完整:低置信度,先展示给用户确认
5. 既没有动作,也不重要:跳过

日历事项标题规则:

- 日历事项代表“会议 / 讨论 / 汇报 / 活动”,不是执行任务本身。
- 标题应该写成“关于 X 的讨论”“X 汇报”“X 会议”,不要写成“完成 X”。
- 描述里可以保留原始任务、来源文件和补充信息。

提醒事项标题规则:

- 标题用动词开头,清楚表达要做什么。
- 有截止时间就写入截止时间。
- 描述里保留来源文件和原文片段。

Obsidian 日记待办规则:

- 写成 Markdown checkbox例如 `- [ ] 任务内容`
- 如果有日期或时间,保留在人能看懂的位置
- 尽量附来源文件名,方便回看

### Step 6. 先整理给用户看

写入前,必须先展示整理结果。

使用这个格式:

```markdown
## 提取到的待办

| # | 待办 | 建议去向 | 时间 | 依据 | 置信度 |
|---|---|---|---|---|---|
| 1 | 完成项目报告 | Apple 提醒事项 | 5月28日 18:00 前 | 有截止时间 | 高 |
| 2 | 文旅客户周报汇报 | Apple 日历 | 每周二下午 | 汇报活动,有时间段 | 中 |
| 3 | 整理课程想法 | 只展示 | 无明确时间 | 重要但无时间 | 中 |

## 需要你确认

- 低置信度:
- 日期可能有歧义:
- 建议跳过:
```

然后询问:

```text
请选择要写入的待办编号,例如 1,2,3。
也可以说“全部写入”“只展示,不写入”“重新整理”。
```

没有得到明确确认前,不得写入 Apple 或 Obsidian。

### Step 7. 写入 Apple 日历 / 提醒事项

只有当 `output_modes` 包含 Apple且用户确认写入时才执行。

写入前检查:

- 当前环境是否是 macOS
- 是否能访问 Calendar
- 是否能访问 Reminders
- 是否能读取可用日历和提醒事项列表

如果读取失败,用人话提示:

```text
我现在不能访问你的 Apple 日历或提醒事项。请打开系统设置,进入“隐私与安全性”,允许当前 AI 工具访问日历和提醒事项。你也可以选择只在对话里展示清单。
```

目标位置规则:

- 有明确开始和结束时间的日历事项,根据 `apple.calendar_rule` 选择日历
- 只有截止时间的任务,根据 `apple.reminder_rule` 选择提醒事项列表
- 没有明确时间但重要的事项,根据 `apple.untimed_rule` 处理

如果配置为“每次让我选择”,先列出可用日历或提醒事项列表,让用户选择。

真正写入前,再展示一次:

```markdown
## 即将写入 Apple

### 日历
- [日历名] 事项:时间:

### 提醒事项
- [列表名] 任务:截止:
```

用户确认后再写入。

### Step 8. 写入 Obsidian 日记页面

只有当 `output_modes` 包含 Obsidian且用户确认写入时才执行。

根据待办的目标日期找到对应日记页面:

- 使用 `obsidian.daily_folder`
- 使用 `obsidian.daily_filename_pattern`
- 如果没有目标日期,默认写入今天的日记页面,但要在写入前说明

找到日记页面后,把待办追加到 `obsidian.todo_heading` 对应的小标题下方。

如果找不到这个小标题,询问用户:

```text
我没有在这篇日记里找到“{{OBSIDIAN_TODO_HEADING}}”这个小标题。
你希望我怎么做?

A. 创建这个小标题并写入
B. 改为写到页面最后
C. 取消写入
```

如果待办属于将来的某一天,但那天的日记页面还不存在,按 `obsidian.future_page_rule` 处理:

- 允许按日记模板创建那一天的日记页面,并写入待办
- 不创建新页面,只把待办展示给用户自己处理
- 每次遇到这种情况都先问用户

如果需要创建未来日记页面,但没有配置日记模板,必须先询问用户提供模板路径或模板内容;不要擅自创建空白日记。

写入前展示:

```markdown
## 即将写入 Obsidian

- 目标日记:
- 小标题:
- 待办:
```

用户确认后再写入。

### Step 9. 两个都写入

如果用户选择 Apple 和 Obsidian 都写入:

- Apple 负责提醒和日程执行
- Obsidian 负责在日记里留下记录
- 两边都必须先展示即将写入的内容
- 用户确认后再分别写入

如果其中一个系统写入失败,不要回滚另一个系统;报告成功和失败的明细。

### Step 10. 完成反馈

完成后简短报告:

```markdown
已处理:
- 写入 Apple 日历X 项
- 写入 Apple 提醒事项X 项
- 写入 Obsidian 日记X 项
- 只展示未写入X 项
- 跳过X 项

需要你后续处理:
- ...
```

## Output Format

对话中统一使用清晰 Markdown。

待办表格必须包含:

- 编号
- 待办内容
- 建议去向
- 时间
- 判断依据
- 置信度

不要使用用户不容易理解的词,例如 backend、heading、database schema、API token、preview。优先使用

- 写入位置
- 小标题
- 先给你看
- 连接凭证
- 文件属性

## Quality Checklist

处理前检查:

- 是否只扫描用户提供或配置的路径
- 是否只处理 Markdown 文件
- 是否说明扫描文件数量
- 是否按文件名/标题日期、文件属性日期、创建时间、修改时间筛选文件
- 是否正确处理相对时间
- 是否区分日历事项和提醒事项
- 是否把无时间但重要的事项按用户配置处理
- 是否先把待办清单整理给用户看
- 是否得到用户确认后才写入
- 是否没有写入 Todoist、Notion、Google、Microsoft 或 Apple Notes
- 是否没有导出 JSON 或单独 Markdown 文件

## One Sentence Principle

扫描范围由用户指定;待办先整理给用户看;写入只支持 Apple 日历/提醒事项和 Obsidian 日记页面;不确定就标出来,不自动写错。

六、创建后检查并测试

创建完成后,请检查:

  • {{SKILL_FOLDER_NAME}}/SKILL.md 是否存在。
  • 所有 {{变量名}} 占位符是否都已替换。
  • 文件中是否残留用户本机私有路径、真实账号、token、secret、AppSecret。
  • SKILL.md 是否明确写了:不支持 Todoist / Notion / Google / Microsoft / Apple Notes。
  • SKILL.md 是否明确写了:不导出 JSON 或单独 Markdown 文件。
  • SKILL.md 是否明确写了:写入前必须先整理给用户看并确认。
  • Obsidian 配置里是否使用“小标题”这个说法,而不是 heading。
  • “未来日期日记页面不存在”问题的选项是否是A 允许按模板创建B 不创建只展示C 每次先问。

然后用这条请求做功能验证:

帮我从我配置的会议纪要和录音卡导入文件夹里提取这周的待办,先整理给我看,不要写入。

期望行为:

  • skill 只扫描配置的文件夹。
  • skill 说明本周起止日期。
  • skill 列出命中的 Markdown 文件数量。
  • skill 提取待办并给出建议去向、时间、依据和置信度。
  • skill 不写入 Apple 或 Obsidian。
  • skill 等用户明确选择编号和确认后,才进入写入步骤。

最后告诉用户:

  • skill 文件夹创建在哪里
  • 创建了哪些文件
  • 如何触发这个 skill
  • 第一次试跑时应该提供什么请求