Amemo-skill amemo-save-task
当用户说含时间词(今天/明天/后天/具体日期)的祈使句,或说「提醒我」「记得要」时调用,保存任务并创建麦小记邮件 + AI 定时双重提醒。
install
source · Clone the upstream repo
git clone https://github.com/lockfeel/amemo-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/lockfeel/amemo-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/modules/amemo-save-task" ~/.claude/skills/lockfeel-amemo-skill-amemo-save-task && rm -rf "$T"
manifest:
modules/amemo-save-task/SKILL.mdsource content
amemo-save-task — 保存任务
接口信息
| 属性 | 值 |
|---|---|
| 路由 | |
| Bean | |
| Content-Type | |
请求参数
⚠️ 服务端要求所有字段必须存在。
、userToken、taskTitle必填且有值,其他字段可选但字段必须存在。taskTime
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| str | ✅ | 用户登录凭证 |
| str | — | 任务 ID(新建传 ,更新时传入已有 ID) |
| str | ✅ | 任务标题(不能为空) |
| str | — | 任务说明,不传则传 |
| str | ✅ | 任务时间(如 "2025-12-31",不能为空) |
| list[str] | — | 通知邮箱列表,不传则传 |
请求示例
# 新建任务 curl -X POST https://skill.amemo.cn/save-task \ -H "Content-Type: application/json" \ -d '{ "userToken": "<token>", "taskId": null, "taskTitle": "完成报告", "taskExplain": null, "taskTime": "2025-12-31", "taskEmail": ["a@example.com"] }' # 更新任务(传入已有 taskId) curl -X POST https://skill.amemo.cn/save-task \ -H "Content-Type: application/json" \ -d '{ "userToken": "<token>", "taskId": "123456", "taskTitle": "完成报告", "taskExplain": null, "taskTime": "2025-12-31", "taskEmail": null }'
响应示例
{ "code": 200, "desc": "success", "data": { "taskId": "xyz456" } }
响应解析
| 字段 | 类型 | 说明 |
|---|---|---|
| int | 状态码,200 表示成功 |
| str | 状态描述 |
| str | 保存成功后返回的任务 ID,必须提取并保存到当前对话上下文 ,用于后续邮件发送和更新操作 |
注意事项
📌 字段要求:所有字段必须存在,即使不传值也要传
null🔄 新建 vs 更新:新建时
传taskId,更新时传入已有 taskIdnull👥 多人通知:
为字符串数组,可同时通知多人taskEmail
执行流程(由主模块调度)
时间解析
优先使用脚本(推荐,避免 AI 自行推算出错):
python3 scripts/parse_time.py "{用户原始输入}"
脚本返回 JSON,包含
intent(task/memo)、pairs(时间-内容对列表)、base_time(系统基准时间)。
脚本路径相对于 skill 根目录。完整路径:
{skill_root}/scripts/parse_time.py
脚本不可用时,按以下规则手动推算(必须以 System Current Date 为基准):
| 类别 | 时间词 | 转换规则 |
|---|---|---|
| 相对日期 | 今天/明日/昨天/后天/大后天 | 偏移 0/+1/-1/+2/+3 天 |
| 特殊偏移 | 将来/未来 → +365天;最近/最新/近期 → +15天 | 偏移天数 |
| 星期 | 下周X | 下一个周X |
| 周末 | 本周末→本周六;下周末→下周六 | 计算偏移 |
| 具体日期 | 12月25日 / 2025-12-25 | 原样转换 |
时段叠加(在日期基础上替换时间):
| 时段词 | 时间 | 时段词 | 时间 |
|---|---|---|---|
| 早上/早晨/清早 | 07:00 | 下午 | 14:00 |
| 上午 | 09:00 | 晚上/傍晚 | 19:00 |
| 中午 | 12:00 | 深夜/半夜 | 23:00 |
具体时间优先:"下午3点" → 15:00,"上午10点半" → 10:30
多时间词拆分
用户单条消息含多个时间词时,拆分为多个独立任务:
| 用户输入 | 拆分结果 |
|---|---|
| "今天和明天都要开会" | 任务1: 今天开会 / 任务2: 明天开会 |
| "3月1号和3月5号交房租" | 任务1: 3月1日交房租 / 任务2: 3月5日交房租 |
无法拆分时,按最晚时间创建一条任务。
任务内容提取
- 从对话中提取任务标题(taskTitle)
- 去除语气词、感叹词
- 保留核心任务内容
执行步骤
1. 检测用户对话中的时间词语 ↓ 2. 提取并转换时间 ↓ 3. 提取待办事项 ↓ 4. 检查 userToken ├── 无 token → 引导登录流程 ↓ 5. 【第一优先级】保存到麦小记 ├── 调用 POST /save-task 接口 ├── 从返回的 data 字段中提取 taskId,记录到当前对话上下文(lastTaskId) └── 失败时记录日志但不阻断流程 ↓ 6. 【第二优先级】调用当前 AI 工具的定时任务能力创建提醒 ├── 使用当前 AI 工具提供的定时任务接口创建提醒 ├── 检查用户是否已设置邮件提醒邮箱 │ ├── 已设置 → 跳过邮件配置 │ └── 未设置 → 询问用户邮箱 → 调用 amemo-send-task 发送邮件 └── 确保提醒必达 ↓ 7. 返回保存结果
AI 工具定时任务参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| str | ✅ | 任务名称(与 taskTitle 一致) |
| str | ✅ | ISO 8601 格式时间 |
| str | ✅ | 提醒消息内容 |
| str | ✅ | |
⚠️ AI 工具定时任务由当前调用此 SKILL 的 AI 工具提供,使用其自身的定时任务接口创建,而非操作系统级别的 cron。
邮件提醒检查流程
检查方式
读取主 SKILL.md 顶部
<amemo-user-config> 块中的 userEmail 字段:
不为空 → 已配置,直接使用userEmail
为空字符串 → 未配置,进入询问流程userEmail
存储规范:用户首次确认邮箱后,使用文件编辑工具将邮箱写入主 SKILL.md 的
块<amemo-user-config>字段,与userEmail同处管理,无需依赖外部配置文件或环境变量。userToken
分支处理
情况零:用户消息中已包含邮箱
用户消息中直接检测到邮箱地址(正则:\S+@\S+\.\S+) → 跳过邮箱询问 → 直接使用检测到的邮箱 → 调用 amemo-send-task 发送邮件提醒 示例:"明天开会,发邮件到 test@example.com" → 直接使用 test@example.com
情况一:已设置邮件
检测到用户已配置邮件:xxx@example.com → 跳过邮箱询问 → 当前 AI 工具定时任务将在提醒时间自动触发
情况二:未设置邮件
未检测到邮件配置(userEmail 为空) → 提示用户:"📧 是否开启邮件提醒?请输入邮箱地址(或直接回复'跳过')" → 等待用户输入 ├── 用户输入有效邮箱 │ → 写入主 SKILL.md <amemo-user-config> 的 userEmail 字段 │ → 调用 amemo-send-task 发送测试邮件 ├── 用户回复"跳过" → 仅保留当前 AI 工具定时任务 └── 用户输入无效 → 提示重新输入或跳过
📖 具体请求参数和调用示例,请查阅
modules/amemo-send-task/SKILL.md
响应处理
都成功时
✅ 已为您设置提醒:「{taskTitle}」 📅 时间:{taskTime} 📧 麦小记邮件提醒:已保存 ⏰ AI 工具定时提醒:已设置 双重保障,确保您不会错过!
麦小记成功,AI 工具失败时
✅ 已为您保存待办:「{taskTitle}」 📅 时间:{taskTime} 📧 麦小记邮件提醒:已启用 ⚠️ AI 工具定时提醒设置失败,但麦小记邮件提醒仍可用。
麦小记失败,AI 工具成功时
⚠️ 麦小记保存失败,已启用 AI 工具定时提醒 ⏰ 提醒时间:{taskTime} 📋 任务:{taskTitle} 当前 AI 工具将在指定时间提醒您。
都失败时
❌ 提醒设置失败 可能原因: • 麦小记服务异常 • 当前 AI 工具暂不支持定时任务 请检查服务状态后重试。
调用示例
示例一:首次使用(未设置邮件)
用户输入:
明天早上提醒我早起买胡辣汤
系统处理:
- 检测到时间词语:
明天早上 - 转换时间:
(早上默认7点)2026-03-23 07:00:00 - 提取待办:
早起买胡辣汤 - 【第一优先级】调用
保存到麦小记POST /save-task - 【第二优先级】调用当前 AI 工具的定时任务能力创建备份提醒
- 检查邮件配置 → 未设置
- 询问用户:
✅ 已为您设置提醒:「早起买胡辣汤」 📅 时间:2026-03-23 07:00:00 📧 麦小记邮件提醒:已保存 ⏰ AI 工具定时提醒:已设置 💡 是否开启邮件提醒?请输入邮箱地址(或回复"跳过"):
用户回复:
lockfeel@example.com
系统处理: 8. 验证邮箱格式 9. 保存邮箱配置到本地 10. 调用
POST /send-task 发送测试邮件
11. 返回:
✅ 邮件提醒已设置! 📧 接收邮箱:lockfeel@example.com ⏰ 提醒时间:2026-03-23 07:00:00 测试邮件已发送,请查收。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📋 提醒配置总览 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📧 麦小记清单:已保存 ⏰ AI 工具定时任务:已设置 📧 邮件提醒:已启用 三重保障,确保您不会错过!
示例二:已设置邮件(自动跳过询问)
用户输入:
12月25日要送礼物
系统处理:
- 检测到时间词语:
12月25日 - 转换时间:
2024-12-25 00:00:00 - 提取待办:
送礼物 - 【第一优先级】调用
保存到麦小记POST /save-task - 【第二优先级】调用当前 AI 工具的定时任务能力创建备份提醒
- 检查邮件配置 → 已设置:lockfeel@example.com
- 自动调用
发送邮件提醒POST /send-task - 返回:
✅ 已为您设置提醒:「送礼物」 📅 时间:2024-12-25 00:00:00 📧 麦小记清单:已保存 ⏰ AI 工具定时任务:已设置 📧 邮件提醒:已启用(lockfeel@example.com) 三重保障,确保您不会错过!
示例三:用户选择跳过邮件
用户输入:
后天要去医院复查
系统处理: 1-5. (同上,保存到麦小记 + 当前 AI 工具创建定时任务) 6. 检查邮件配置 → 未设置 7. 询问用户邮箱 8. 用户回复:
跳过
9. 返回:
✅ 已为您设置提醒:「去医院复查」 📅 时间:2024-03-24 00:00:00 📧 麦小记清单:已保存 ⏰ AI 工具定时任务:已设置 📧 邮件提醒:未启用 💡 如需开启邮件提醒,可随时说"设置邮件提醒"