Install to Claude Code
npx -y skills add https://github.com/lostabaddon/headlessknight --skill reminderDescription
reminder
SKILL.md
---
name: reminder
description: 当用户提到需要记住的未来任务、约会或事件时创建提醒和日历事件。在诸如"提醒我"、"设置提醒"、"我有个会"、"别忘了"或任何提及未来基于时间的任务时触发。
---
# 提醒与日历事件技能
此技能可从自然语言输入中智能创建提醒和日历事件。
## 何时使用
在用户执行以下操作时激活此技能:
- 明确要求设置提醒("提醒我..."、"设置一个提醒...")
- 提到带有时间的未来任务("我下午 3 点有个会")
- 表达需要记住某事("别忘了..."、"我需要...")
- 讨论带有时间信息的即将到来的事件或约会
**当触发此技能时,你有责任实际调用 shell 脚本,而不是仅仅说明如何做。**
## 使用方法
### 步骤 1:解析用户输入
分析用户消息以提取(可能不止一组):
1. **标题**:需要记住的事情的简短描述
2. **消息**:详细信息(可选,可以与标题相同)
3. **时间**:提醒应何时触发
**关键点**:完成此解析后,立即进行第 2 步(调用工具)。不要仅停留在解析阶段。
### 步骤 2:创建提醒
对于识别出的每个提醒,**必须**使用 Bash 工具调用 `node` 并让它调用 `./create-reminder.js` 脚本来发送提醒与日历事件请求。
**重要**:不仅仅是说明要创建提醒,而是要实际调用此脚本。
脚本路径:
- 相对于技能目录:`./create-reminder.js`
- 绝对路径:需要根据 HeadlessKnight 的安装位置确定
脚本参数:
- **--title**:简洁摘要(例如,"团队会议"、"给妈妈打电话")
- **--message**:附加详情或上下文
- **--time**:**必须是以下英文格式之一**:
- 相对时间(英文):"in 10 seconds"、"in 30 minutes"、"in 2 hours"、"in 1 day"、"in 2 weeks"、"in 1 month"、"in 1 year"
- 绝对时间:ISO 格式,如 "2025-11-24T15:30:00"
- ⚠️ **禁止**传递中文时间格式如"十秒"、"一小时"等,必须先转换为英文
**执行方式**:
1. 使用 Bash 工具调用脚本,而不是模拟或说明
2. **确保 `--time` 参数已转换为英文格式**(按照下面"时间解析指南"中的转换规则)
3. 命令格式:`node /path/to/create-reminder.js --title="标题" --message="消息" --time="时间"`
### 步骤 3:实际调用脚本
调用完成后,检查脚本的输出。脚本会返回确认信息,包括提醒 ID 和计划时间。
### 步骤 4:确认创建
根据脚本的输出,确认用户的提醒已创建。告知用户:
- 设置了什么
- 何时触发
- 系统通知将在指定时间自动显示(由 CCCore 守护进程处理)
## 示例
### 示例 1:单个提醒
**用户**:"30 分钟后提醒我给 John 打电话"
**你应该做的**:
1. 解析输入:标题="给 John 打电话",时间="in 30 minutes"
2. **实际调用脚本**(不仅仅是说明):
```bash
node ${CLAUDE_PLUGIN_ROOT}/skills/reminder/create-reminder.js --title="给 John 打电话" --message="给 John 打电话" --time="in 30 minutes"
```
3. 等待脚本返回结果
4. 告诉用户:"✅ 已设置提醒,30 分钟后你会收到通知"
### 示例 2:多个事件
**用户**:"我今天下午 2 点有个会,5 点前需要提交报告"
**你应该做的**:
1. 识别两个事件
2. **实际调用脚本**两次:
**第一个提醒**:
```bash
node ${CLAUDE_PLUGIN_ROOT}/skills/reminder/create-reminder.js --title="会议" --message="参加预定会议" --time="2025-11-24T14:00:00"
```
**第二个提醒**:
```bash
node ${CLAUDE_PLUGIN_ROOT}/skills/reminder/create-reminder.js --title="提交报告" --message="提交报告" --time="2025-11-24T17:00:00"
```
3. 等待两个脚本都返回结果
4. 确认两个提醒都已创建
### 示例 3:相对时间
**用户**:"别让我忘了 45 分钟后把蛋糕从烤箱拿出来!"
**你应该做的**:
1. 解析输入:标题="把蛋糕从烤箱拿出来",时间="in 45 minutes"
2. **实际调用脚本**:
```bash
node ${CLAUDE_PLUGIN_ROOT}/skills/reminder/create-reminder.js --title="把蛋糕从烤箱拿出来" --message="从烤箱取出蛋糕" --time="in 45 minutes"
```
3. 等待脚本返回结果
4. 告诉用户:"✅ 45 分钟后我会提醒你"
## 时间解析指南
⚠️ **关键提醒**:create-reminder.js 脚本**仅接受英文时间格式**。如果你传递中文时间格式,脚本会返回错误。
### 相对时间转换
**必须执行**:用户可能用中文表达时间,你**必须**在调用脚本之前转换为英文格式。
#### 中文到英文转换规则(必须按此规则执行)
第 1 步:将中文数字转换为阿拉伯数字:
- "十" → 10、"一" → 1、"二" → 2、"三" → 3、"四" → 4、"五" → 5、"六" → 6、"七" → 7、"八" → 8、"九" → 9
- "两" / "二" → 2、"半" → 0.5(30分钟时为 30)
- "十秒" → 10秒、"一分钟" → 1分钟、"两小时" → 2小时、"三周" → 3周、"四个月" → 4月、"五年" → 5年
第 2 步:将中文时间单位转换为英文单词:
- "秒" / "秒后" → "seconds"
- "分钟" / "分钟后" / "分" → "minutes"
- "小时" / "小时后" / "钟头" → "hours"
- "天" / "天后" → "days"
- "周" / "星期" / "周后" → "weeks"(注意:1周 = 7天)
- "月" / "个月" / "月后" → "months"(注意:1月按30天计算)
- "年" / "年后" → "years"(注意:1年按365天计算)
第 3 步:组合成脚本要求的格式:`"in {数字} {英文单位}"`
- 中文:"十秒后" → 阿拉伯数字:"10秒" → 英文:"seconds" → **最终格式:`"in 10 seconds"`**
- 中文:"半小时后" → 阿拉伯数字:"30分钟" → 英文:"minutes" → **最终格式:`"in 30 minutes"`**
#### 具体转换例子(展示完整过程)
- 用户说:"十秒后提醒我"
1. 解析:时间部分 = "十秒后"
2. 转换数字:"十" → 10
3. 转换单位:"秒" → "seconds"
4. **最终传给脚本:`--time="in 10 seconds"`**
- 用户说:"半小时后提醒"
1. 解析:时间部分 = "半小时后"
2. 转换数字:"半" → 30(分钟)
3. 转换单位:"小时" → "minutes"
4. **最终传给脚本:`--time="in 30 minutes"`**
- 用户说:"2小时后提醒"
1. 解析:时间部分 = "2小时后"
2. 转换数字:2(已是数字)
3. 转换单位:"小时" → "hours"
4. **最终传给脚本:`--time="in 2 hours"`**
- 用户说:"一周后提醒我"
1. 解析:时间部分 = "一周后"
2. 转换数字:"一" → 1
3. 转换单位:"周" → "weeks"
4. **最终传给脚本:`--time="in 1 week"`**
- 用户说:"三个月后提醒"
1. 解析:时间部分 = "三个月后"
2. 转换数字:"三" → 3
3. 转换单位:"个月" → "months"
4. **最终传给脚本:`--time="in 3 months"`**
- 用户说:"明年这个时候提醒我"
1. 解析:时间部分 = "一年后"
2. 转换数字:"一" → 1
3. 转换单位:"年" → "years"
4. **最终传给脚本:`--time="in 1 year"`**
- 用户说:"明天下午3点"
- 这不是相对时间格式,**使用下面的绝对时间规则**,转换为 ISO 格式
### 相对时间
- "in X seconds":秒级提醒
- "in X minutes":分钟级提醒
- "in X hours":小时级提醒
- "in X days":天级提醒
- "in X weeks":周级提醒(1周 = 7天)
- "in X months":月级提醒(1月 = 30天)
- "in X years":年级提醒(1年 = 365天)
### 绝对时间
将自然语言转换为 ISO 格式:
- "今天下午 3 点" → 计算当前日期下午 3 点的 ISO 日期时间
- "明天上午 9 点" → 计算次日上午 9 点的 ISO 日期时间
- "下周一下午 2 点" → 计算下周一下午 2 点的 ISO 日期时间
### 当前上下文
始终考虑:
- 今天的日期:检查系统上下文获取当前日期/时间
- 用户的时区:使用本地时间进行计算
- 默认时间:如果未指定时间,询问用户或建议合理的默认值
## 其他功能
### 列出活动提醒
当用户询问"我有哪些提醒?"或"显示我即将到来的事件"时,可以通过以下方式查看:
- 使用 CCCore 的客户端命令:`cccore-client list-reminders`
- 或者告知用户提醒已创建并保存在 CCCore 中
### 取消提醒
当用户想取消特定提醒时,可以使用 CCCore 的客户端命令:
- `cccore-client cancel-reminder <reminder-id>`
- 需要提供具体的提醒 ID
## 重要说明
1. **必须调用脚本**:这不是可选的!当用户请求提醒时,你**必须**实际使用 Bash 工具调用 `create-reminder.js` 脚本。如果你只是说明你会做什么而不实际调用脚本,用户不会收到提醒。
2. **时间格式必须是英文**:⚠️ **关键**:无论用户用什么语言输入,传给脚本的 `--time` 参数**必须是英文格式**:
- ✅ 正确格式:`"in 10 seconds"`、`"in 30 minutes"`、`"in 2 hours"`、`"in 1 day"`、`"in 2 weeks"`、`"in 1 month"`、`"in 1 year"`、`"2025-11-24T15:30:00"`
- ❌ 错误格式:`"十秒后"`、`"一小时"`、`"半小时后"`、`"一周后"`、`"三个月后"`、`"一年后"`
- 如果你传递中文时间格式,脚本会返回错误,提醒不会被创建!
- **必须按照"时间解析指南"进行转换**
3. **依赖 CCCore**:此脚本通过 Socket IPC 与 CCCore 守护进程通信。确保:
- CCCore 守护进程正在运行
- Socket 文件存在且可访问
- 如果脚本报错"CCCore 守护进程未运行",提示用户启动 CCCore
4. **系统通知**:提醒将显示为系统级警报,由 CCCore 守护进程处理。该过程是完全自动化的,你不需要手动触发通知。
5. **持久化**:提醒存储在 CCCore 的数据文件中(`~/.cccore-reminders/reminders.json`),在重启后仍然存在。
6. **多个提醒**:如果用户提到多个事件,为每个事件分别调用脚本创建提醒。
7. **确认**:等待脚本返回结果后,再确认创建了什么以及何时触发。
8. **脚本路径**:脚本的绝对路径为 `${CLAUDE_PLUGIN_ROOT}/skills/reminder/create-reminder.js`,使用 `node` 命令执行。
## 故障排除与常见问题
### 提醒未创建?
如果用户说没有收到提醒,可能的原因:
1. **脚本未被调用**:检查 Claude Code 是否实际调用了 Bash 工具执行脚本。如果没有看到脚本执行,这就是问题所在。
2. **CCCore 守护进程未运行**:脚本依赖 CCCore 守护进程。
- 检查 Socket 文件是否存在
- 提示用户启动 CCCore 守护进程
- 验证 Socket 路径是否正确
3. **时间格式错误(最常见的原因)**:⚠️ 检查传递给脚本的 `--time` 参数是否为英文格式:
- ✅ 正确格式(英文):`"in 10 seconds"`、`"in 30 minutes"`、`"in 2 hours"`、`"in 1 day"`、`"in 2 weeks"`、`"in 1 month"`、`"in 1 year"`、`"2025-11-24T15:30:00"`
- ❌ 错误格式(中文):`"十秒后"`、`"一小时"`、`"半小时"`、`"一周后"`、`"三个月后"`、`"一年后"`
- 如果脚本返回错误消息如"无效的时间格式",一定是时间格式不是英文
- **解决方案**:按照"时间解析指南"进行转换
4. **时间转换失败**:如果无法将中文时间转换为英文:
- 向用户请求更清晰的时间表达
- 提供示例:"请说'10秒后'、'30分钟后'、'2小时后'、'1周后'、'3个月后'或'1年后'这样的格式"
- 参考"时间解析指南"中的转换规则
5. **参数缺失**:确保提供了所有必需参数:`--title`、`--message`、`--time`
### 时间解析失败
如果脚本返回错误(通常是时间格式错误):
- 首先检查是否传递了中文时间格式(这会导致错误)
- 应该已经按照"时间解析指南"转换为英文格式
- 如果转换有困难,向用户请求澄清
- 建议用户使用英文格式如"in 30 minutes"、"in 2 hours"、"in 1 day"、"in 2 weeks"、"in 1 month"、"in 1 year"或具体时间"2025-11-24T15:30:00"
- 提供有效时间格式的示例
### 提醒已创建但未显示通知
- 检查 CCCore 守护进程是否正常运行
- 检查系统通知设置是否已启用
- macOS:系统设置 > 通知
- Windows:设置 > 系统 > 通知
- Linux:确保 `notify-send` 已安装
- 查看提醒数据文件:`~/.cccore-reminders/reminders.json`
