# Reminder

> 当用户提到需要记住的未来任务、约会或事件时创建提醒和日历事件。在诸如"提醒我"、"设置提醒"、"我有个会"、"别忘了"或任何提及未来基于时间的任务时触发。

- Skill: `lostabaddon/reminder` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add lostabaddon/reminder`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lostabaddon/reminder/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: lostabaddon (https://skillmd.com/u/lostabaddon)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/lostabaddon/reminder

---


# 提醒与日历事件技能

此技能可从自然语言输入中智能创建提醒和日历事件。

## 何时使用

在用户执行以下操作时激活此技能：
- 明确要求设置提醒（"提醒我..."、"设置一个提醒..."）
- 提到带有时间的未来任务（"我下午 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`

