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

amemo-save-task — 保存任务


接口信息

属性
路由
POST https://skill.amemo.cn/save-task
Bean
TaskBean
Content-Type
application/json

请求参数

⚠️ 服务端要求所有字段必须存在。

userToken
taskTitle
taskTime
必填且有值,其他字段可选但字段必须存在。

参数类型必填说明
userToken
str用户登录凭证
taskId
str任务 ID(新建传
null
,更新时传入已有 ID)
taskTitle
str任务标题(不能为空)
taskExplain
str任务说明,不传则传
null
taskTime
str任务时间(如 "2025-12-31",不能为空)
taskEmail
list[str]通知邮箱列表,不传则传
null

请求示例

# 新建任务
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"
  }
}

响应解析

字段类型说明
code
int状态码,200 表示成功
desc
str状态描述
data.taskId
str保存成功后返回的任务 ID,必须提取并保存到当前对话上下文
lastTaskId
,用于后续邮件发送和更新操作

注意事项

📌 字段要求:所有字段必须存在,即使不传值也要传

null

🔄 新建 vs 更新:新建时

taskId
null
,更新时传入已有 taskId

👥 多人通知

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 工具定时任务参数

参数类型必填说明
name
str任务名称(与 taskTitle 一致)
schedule.at
strISO 8601 格式时间
payload.text
str提醒消息内容
sessionTarget
str
"main"

⚠️ 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 工具暂不支持定时任务

请检查服务状态后重试。

调用示例

示例一:首次使用(未设置邮件)

用户输入:

明天早上提醒我早起买胡辣汤

系统处理:

  1. 检测到时间词语:
    明天早上
  2. 转换时间:
    2026-03-23 07:00:00
    (早上默认7点)
  3. 提取待办:
    早起买胡辣汤
  4. 【第一优先级】调用
    POST /save-task
    保存到麦小记
  5. 【第二优先级】调用当前 AI 工具的定时任务能力创建备份提醒
  6. 检查邮件配置 → 未设置
  7. 询问用户:
✅ 已为您设置提醒:「早起买胡辣汤」
📅 时间: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日要送礼物

系统处理:

  1. 检测到时间词语:
    12月25日
  2. 转换时间:
    2024-12-25 00:00:00
  3. 提取待办:
    送礼物
  4. 【第一优先级】调用
    POST /save-task
    保存到麦小记
  5. 【第二优先级】调用当前 AI 工具的定时任务能力创建备份提醒
  6. 检查邮件配置 → 已设置:lockfeel@example.com
  7. 自动调用
    POST /send-task
    发送邮件提醒
  8. 返回:
✅ 已为您设置提醒:「送礼物」
📅 时间:2024-12-25 00:00:00

📧 麦小记清单:已保存
⏰ AI 工具定时任务:已设置
📧 邮件提醒:已启用(lockfeel@example.com)

三重保障,确保您不会错过!

示例三:用户选择跳过邮件

用户输入:

后天要去医院复查

系统处理: 1-5. (同上,保存到麦小记 + 当前 AI 工具创建定时任务) 6. 检查邮件配置 → 未设置 7. 询问用户邮箱 8. 用户回复:

跳过
9. 返回:

✅ 已为您设置提醒:「去医院复查」
📅 时间:2024-03-24 00:00:00

📧 麦小记清单:已保存
⏰ AI 工具定时任务:已设置
📧 邮件提醒:未启用

💡 如需开启邮件提醒,可随时说"设置邮件提醒"