lockfeel

amemo-skill

amemo-skill 统一调度中心,专为 AI 工具链接麦小记 APP 而开发的技能包,专注于笔记、清单和健康数据的管理。当用户需要与麦小记服务交互时,必须使用此 skill 进行统一调度。 触发关键词:amemo、麦小记、笔记、note、memo、清单、todo、task、数据、data、AI 助手、mate、登录、验证码、查询记录。 自动保存笔记触发词:保存笔记、记下这一条、记录笔记、帮我记一下、保存备忘。 自动查询笔记触发词:查看我XXX相关的笔记、查找XXX相关的笔记、搜索我XXX相关的笔记。 自动查询任务触发词:查看我的清单、查询清单、我的待办、查看任务、查询任务、列出任务、搜索任务。 自动查询数据触发词:查看我的XXX数据、查找我的XXX数据、XXX数据怎么样(XXX为步数/睡眠/血氧/血压/心率/消耗)。 自动健康简报触发词:今日健康简报、今日健康总览、今日健康情况、健康简报、健康日报。 自动保存任务触发词:今天XXX、明天XXX、昨天XXX、后天XXX、将来XXX、未来XXX、最近XXX、最新XXX、近期XXX、今日XXX、明日XXX、昨日XXX、12月XX日XXX(具体日期)。 双保险提醒机制:检测到时间触发词时,【第一优先级】保存到麦小记(利用其邮件提醒功能),【第二优先级】创建系统定时任务并检查邮件配置。如未设置邮件,自动询问用户邮箱并调用 amemo-send-task 发送邮件提醒,确保提醒必达。 自动刷新记忆触发词:刷新助手记忆、初始化助手记忆、重置记忆。 自动保存记忆触发词:保存永久记忆、永久记住XXX、记住这个。 此 skill 会自动识别用户意图并调度对应子模块完成操作。

lockfeel 8 Updated 2mo ago

Resources

2
GitHub

Install

npx skillscat add lockfeel/amemo-skill

Install via the SkillsCat registry.

SKILL.md

amemo-skill — 统一调度中心

amemo-skill 是 AI 工具(Claude Code / Codex / OpenCode / OpenClaw 等)与 amemo 本地服务交互的统一入口。提供笔记管理、清单管理、健康数据查询、AI 助手记忆同步等功能。

基础配置

  • Base URL: https://skill.amemo.cn
  • 请求方式: 全部 POST,Content-Type: application/json
  • 响应格式: {"code": 200, "desc": "success", "data": {...}}

注意:具体 API 请求示例和响应数据结构,请查阅对应子模块的 SKILL.md

用户配置管理

重要:此区域的 JSON 配置由系统自动维护,登录成功后会自动更新。

当前登录用户信息:

{
  "userToken": "",
  "userName": "SYSTEM",
  "userPhone": "",
  "loginAt": ""
}

如果显示为示例数据(如 userName: "SYSTEM"),表示尚未登录或登录信息已过期,立即激活登录流程。


### 配置字段

| 字段 | 说明 |
|------|------|
| `userToken` | 用户认证令牌,所有 API 请求必需 |
| `userName` | 用户昵称,用于个性化提醒 |
| `userPhone` | 用户手机号,标识用户身份 |
| `loginAt` | 登录时间,判断登录是否过期 |

### 更新配置流程(自动执行)

用户登录成功后,**系统自动执行以下步骤**:

用户登录成功

提取返回的 userToken, userName, userPhone

读取 SKILL.md 文件内容

定位到顶部 JSON 配置区域(json 和 之间)

替换为新的登录信息:
{
"userToken": "{返回的userToken}",
"userName": "{返回的userName}",
"userPhone": "{返回的userPhone}",
"loginAt": "{当前时间}"
}

写回 SKILL.md 文件

发送个性化欢迎消息


**注意**:此步骤完全自动化,无需用户手动操作。登录成功后配置立即生效。

### 使用示例

**检查登录状态:**

if userToken 为空:
执行登录引导流程
else:
使用 userName 打招呼:"欢迎回来,{userName}!"


**API 请求时:**
> 读取对应子模块的 SKILL.md 获取完整的请求参数和 curl 示例

## 安装后引导流程(Onboarding)

当用户首次安装或检测到未登录(无 userToken)时,自动执行以下引导:

### Step 1: 欢迎消息(自动发送)

👋 欢迎使用 amemo-skill!

我是你的智能笔记助手,可以帮你:
• 📝 保存和查询笔记
• ✅ 管理待办清单
• 📊 查看健康数据
• 🤖 同步 AI 记忆

请先完成登录,发送你的手机号:
示例:13800138000


### Step 2: 手机号提取与验证码发送

**用户输入示例:**
- "13800138000"
- "我的手机号是 138-0013-8000"
- "+86 138 0013 8000"

**系统自动处理:**
1. 提取手机号(正则:`1[3-9]\d{9}`)
2. 调用 `amemo-send-code` 发送验证码
3. 回复:

已向 138****8000 发送验证码,请查收短信。

请输入 4-6 位验证码:


### Step 3: 验证码提取与登录

**用户输入示例:**
- "1234"
- "123456"
- "验证码是 1234"

**系统自动处理:**
1. 提取验证码(4-6位数字)
2. 调用 `amemo-login` 完成登录
3. 保存返回的 `userToken`

### Step 4: 登录成功处理(自动更新配置)

**系统自动执行:**

1. **提取登录返回数据**
   - `userToken`: 用户认证令牌
   - `userName`: 用户昵称
   - `userPhone`: 用户手机号
   - `loginAt`: 当前时间(ISO 8601 格式)

2. **自动更新 SKILL.md 顶部 JSON 配置**
   
   使用文件编辑工具(如 `edit`)自动替换以下内容:
   
   ```json
   {
     "userToken": "{提取的userToken}",
     "userName": "{提取的userName}",
     "userPhone": "{提取的userPhone}",
     "loginAt": "{当前时间}"
   }

替换目标位置:SKILL.md 中 ## 用户配置管理 章节下的 JSON 代码块

  1. 发送个性化欢迎消息

登录成功提示(使用 userName):

✅ 登录成功!欢迎回来,{userName}!

━━━━━━━━━━━━━━━━━━━━━━
📋 功能菜单
━━━━━━━━━━━━━━━━━━━━━━

📝 【笔记管理】
   • 保存笔记 → "帮我记一下..." / "保存笔记..."
   • 查询笔记 → "查看我的笔记" / "查找关于XXX的笔记"
   • 搜索笔记 → "搜索我XXX相关的笔记"

✅ 【清单管理】
   • 创建待办 → "今天/明天/后天要..." / "12月25日要..."
   • 查看清单 → "查看我的清单" / "我的待办"
   • 邮件提醒 → 创建任务后自动询问是否开启邮件提醒

📊 【健康数据】
   • 今日简报 → "今日健康简报" / "健康日报"
   • 步数统计 → "查看我的步数数据"
   • 睡眠分析 → "查看我的睡眠数据"
   • 血氧监测 → "查看我的血氧数据"
   • 血压记录 → "查看我的血压数据"
   • 心率数据 → "查看我的心率数据"
   • 消耗统计 → "查看我的消耗数据"

🤖 【AI 记忆】
   • 刷新记忆 → "刷新助手记忆" / "初始化助手记忆"
   • 保存记忆 → "保存永久记忆" / "永久记住这个"

━━━━━━━━━━━━━━━━━━━━━━
💡 使用提示
━━━━━━━━━━━━━━━━━━━━━━
• 直接说出你想做的事,我会自动识别
• 支持自然语言,无需记住固定指令
• 需要帮助随时输入 "help" 或 "帮助"

━━━━━━━━━━━━━━━━━━━━━━

使用 userName 的场景示例:

  • 欢迎:欢迎回来,{userName}!
  • 确认操作:{userName},已为您保存笔记
  • 提醒:{userName},您有一条待办清单
  • 错误提示:{userName},出了点小问题,请重试

输入提取规则

项目 正则表达式 说明
手机号 1[3-9]\d{9} 自动过滤空格、横线、+86前缀
验证码 \d{4,6} 4-6位连续数字

错误处理

手机号格式错误:

❌ 手机号格式不正确,请发送正确的 11 位手机号。
示例:13800138000

验证码错误:

❌ 验证码错误或已过期,请重新发送验证码。

登录失败:

❌ 登录失败:[错误原因]
请检查手机号和验证码后重试。

接口异常处理:

当调用 API 出现异常时(网络错误、服务未启动、返回非 200 状态码等):

  1. 读取错误信息 - 捕获异常详情
  2. 转换为用户语言 - 将技术错误转为通俗解释
  3. 提供解决方案 - 告诉用户下一步怎么做

常见异常及回复模板:

异常类型 技术错误 用户提示
服务未启动 Connection refused 本地服务未启动
网络超时 Timeout 网络有点慢,请稍后重试
服务繁忙 503 Service Unavailable 服务正忙,请稍后再试
参数错误 400 Bad Request 提交的数据有问题,请检查输入
未授权 401 Unauthorized 登录已过期,请重新登录
未知错误 其他异常 出了点小问题,请稍后重试或联系管理员

错误处理示例流程:

调用接口 → 捕获异常 → 解析错误类型 → 匹配用户提示 → 发送友好提醒

自动保存笔记调度

当用户说以下触发词时,自动调用 amemo-save-memo 接口:

触发词 说明
保存笔记 保存当前对话为笔记
记下这一条 保存当前对话为笔记
记录笔记 保存当前对话为笔记
帮我记一下 保存当前对话为笔记
保存备忘 保存当前对话为笔记

自动保存笔记流程

1. 识别触发词(保存笔记/记下/记录)
    ↓
2. 检查 userToken 是否存在
    ├── 无 token → 引导登录流程
    ↓
3. 提取对话内容
    ├── userContent: 用户上一条消息
    └── aiContent: AI 助手上一条回复
    ↓
4. 整理笔记内容
    memoContent = "{userContent}\n\n【AI】\n{aiContent}"
    ↓
5. 生成简化的 memoTitle
    - 提取用户消息核心关键词(≤10字)
    - 去除语气词、重复词
    - 示例:"这个函数怎么用" → "函数使用方法"
    ↓
6. 调用接口
    > 读取 modules/amemo-save-memo/SKILL.md 获取请求参数
    ↓
7. 返回结果
    - 成功:✅ 已保存笔记:「{memoTitle}」
    - 失败:❌ 保存失败,请重试

标题生成规则

  1. 提取用户消息中最核心的名词/动词
  2. 限制在 20 字以内
  3. 去除:助词、语气词、疑问词
  4. 示例:
    • "这个 Python 异常怎么处理" → "Python异常处理"
    • "帮我记一下今天开会的内容" → "今日开会记录"
    • "React 的 useEffect 怎么用" → "React useEffect用法"

自动查询笔记调度

当用户说以下触发词时,自动调用 amemo-find-memo 接口:

触发词 说明
查看我 XXX 相关的笔记 查看指定主题的笔记
查找 XXX 相关的笔记 查找指定主题的笔记
搜索我 XXX 相关的笔记 搜索指定主题的笔记
搜索笔记 XXX 搜索指定主题的笔记
找一下 XXX 笔记 查找指定主题的笔记

自动查询笔记流程

1. 识别触发词(查看/查找/搜索 + 关键词 + 笔记)
    ↓
2. 检查 userToken 是否存在
    ├── 无 token → 引导登录流程
    ↓
3. 提取关键词
    ├── 去除:查看、查找、搜索、我的、笔记、相关的、等
    ├── 保留核心主题词
    ↓
4. 调用接口
    > 读取 modules/amemo-find-memo/SKILL.md 获取请求参数
    ↓
5. 格式化输出 Markdown

关键词提取规则

  1. 去除通用词:查看、查找、搜索、我的、笔记、备忘、记录、相关的
  2. 保留核心主题词
  3. 示例:
    • "查看我 Python 相关的笔记" → "Python"
    • "查找关于 React Hook 的笔记" → "React Hook"
    • "搜索我收藏的算法笔记" → "算法"
    • "找一下 TypeScript 类型笔记" → "TypeScript 类型"

Markdown 输出格式优化

接口返回的 memoContent 可能是 Markdown 格式,需要优化展示:

单个结果时:

## 📝 {memoTitle}

{memoContent}

多个结果时:

## 📚 找到 {count} 条相关笔记

---

### {index}. {memoTitle}
_{createdAt}_

{memoContent}

---

无结果时:

未找到与「{关键词}」相关的笔记。

你可以:
• 尝试其他关键词
• 保存一条新的笔记

调用示例

用户输入:

查找我 React 相关的笔记

系统处理:

  1. 提取关键词:React
  2. 调用:POST /find-memo with memoTitle: "React"
  3. 格式化输出给用户

自动查询健康数据调度

当用户说以下触发词时,自动调用 amemo-find-data 接口:

触发词 说明
查看我的 XXX 数据 查看指定类型的健康数据
查找我的 XXX 数据 查找指定类型的健康数据
搜索我的 XXX 数据 搜索指定类型的健康数据
我的 XXX 数据 查询指定类型的健康数据
XXX 数据怎么样 查询指定类型的健康数据

数据类型映射(6大类)

关键词 dataType 参数值
步数 步数
睡眠 睡眠
血氧 血氧
血压 血压
心率 心率
消耗 消耗

自动查询数据流程

1. 识别触发词(查看/查找/搜索 + 我的 + XXX + 数据)
    ↓
2. 检查 userToken 是否存在
    ├── 无 token → 引导登录流程
    ↓
3. 提取数据类型关键词
    ├── 去除:查看、查找、搜索、我的、数据、怎么样
    ├── 匹配6大类型
    ↓
4. 匹配判断
    ├── 不匹配 → 告知用户暂无可用数据类型
    ↓
5. 调用接口
    > 读取 modules/amemo-find-data/SKILL.md 获取请求参数
    ↓
6. 数据总结输出

关键词提取与匹配规则

提取示例:

  • "查看我的步数数据" → 匹配 "步数"
  • "查找我的睡眠记录" → 匹配 "睡眠"
  • "心率数据怎么样" → 匹配 "心率"
  • "消耗卡路里" → 匹配 "消耗"

未匹配示例:

  • "查看我的体重数据" → 不匹配6大类
  • "查找我的血糖数据" → 不匹配6大类

数据总结模板

根据不同数据类型,生成对应的总结:

步数 (steps):

## 📊 步数数据

**今日步数**:{latest_steps} 步
**目标完成**:{percentage}%
**数据趋势**:{trend}

最近记录:
| 日期 | 步数 | 备注 |
|------|------|------|
| {date} | {steps} | - |

睡眠 (sleep):

## 😴 睡眠数据

**平均睡眠时长**:{avg_hours} 小时
**睡眠质量**:{quality}(好/一般/差)
**平均入睡时间**:{avg_bedtime}
**平均起床时间**:{avg_wakeup}

最近记录:
| 日期 | 时长 | 入睡 | 起床 | 质量 |
|------|------|------|------|------|
| {date} | {hours}h | {bedtime} | {wakeup} | {quality} |

血氧 (oxygen):

## 🩸 血氧数据

**平均血氧**:{avg_oxygen}%
**最低血氧**:{min_oxygen}%
**异常次数**:{abnormal_count} 次

最近记录:
| 日期 | 血氧 | 备注 |
|------|------|------|
| {date} | {oxygen}% | {note} |

血压 (blood_pressure):

## ❤️ 血压数据

**平均高压**:{avg_systolic} mmHg
**平均低压**:{avg_diastolic} mmHg
**血压状况**:{status}(正常/偏高/偏低)

最近记录:
| 日期 | 高压 | 低压 | 状况 |
|------|------|------|------|
| {date} | {sys} | {dia} | {status} |

心率 (heart_rate):

## 💓 心率数据

**平均心率**:{avg_hr} bpm
**静息心率**:{resting_hr} bpm
**最高心率**:{max_hr} bpm

最近记录:
| 日期 | 心率 | 备注 |
|------|------|------|
| {date} | {hr} bpm | {note} |

消耗 (calorie):

## 🔥 卡路里消耗

**今日消耗**:{latest_cal} kcal
**目标完成**:{percentage}%
**平均每日消耗**:{avg_cal} kcal

最近记录:
| 日期 | 消耗 | 备注 |
|------|------|------|
| {date} | {cal} kcal | {note} |

无数据时回复

未找到与「{关键词}」相关的数据。

目前支持查询的数据类型:
• 步数 - 每日行走步数统计
• 睡眠 - 睡眠时长和质量分析
• 血氧 - 血氧饱和度监测
• 血压 - 血压高低压记录
• 心率 - 心率监测数据
• 消耗 - 卡路里消耗统计

请尝试:查看我的步数数据

调用示例

用户输入:

查看我的心率数据

系统处理:

  1. 提取关键词:心率
  2. 匹配到类型:心率 → 心率
  3. 调用:POST /find-data with dataType: "心率"
  4. 获取数据列表,生成总结

自动健康简报调度

当用户说以下触发词时,自动调用 amemo-last-data 接口获取所有类型最新数据,生成健康简报:

触发词 说明
今日健康简报 获取今日健康数据汇总
今日健康总览 获取今日健康数据汇总
今日健康情况 获取今日健康数据汇总
健康简报 获取健康数据汇总
健康日报 获取健康数据汇总

自动健康简报流程

1. 识别触发词(健康简报/健康总览/健康情况)
    ↓
2. 检查 userToken 是否存在
    ├── 无 token → 引导登录流程
    ↓
3. 调用接口(不传 dataType,获取所有类型最新数据)
    > 读取 modules/amemo-last-data/SKILL.md 获取请求参数
    ↓
4. 解析返回数据
    ├── 步数:steps, stepGoal
    ├── 睡眠:sleepHours, sleepQuality
    ├── 血氧:oxygen
    ├── 血压:systolic, diastolic
    ├── 心率:heartRate
    └── 消耗:calorie, calorieGoal
    ↓
5. 生成健康简报

健康简报模板

根据返回数据,生成结构化的健康简报:

## 📋 今日健康简报
_{date}_

---

### 🚶 运动步数
| 指标 | 数值 | 状态 |
|------|------|------|
| 今日步数 | **{steps}** 步 | {step_status} |
| 目标完成 | **{step_percent}%** | {goal_status} |

{step_comment}

---

### 😴 睡眠情况
| 指标 | 数值 | 状态 |
|------|------|------|
| 睡眠时长 | **{sleep_hours}** 小时 | {sleep_status} |
| 睡眠质量 | **{sleep_quality}** | - |

{sleep_comment}

---

### 🩸 血氧水平
| 指标 | 数值 | 状态 |
|------|------|------|
| 血氧饱和度 | **{oxygen}%** | {oxygen_status} |

{oxygen_comment}

---

### ❤️ 血压状况
| 指标 | 数值 | 状态 |
|------|------|------|
| 高压 | **{systolic}** mmHg | {sys_status} |
| 低压 | **{diastolic}** mmHg | {dia_status} |

{blood_pressure_comment}

---

### 💓 心率状况
| 指标 | 数值 | 状态 |
|------|------|------|
| 当前心率 | **{heart_rate}** bpm | {hr_status} |

{heart_rate_comment}

---

### 🔥 卡路里消耗
| 指标 | 数值 | 状态 |
|------|------|------|
| 今日消耗 | **{calorie}** kcal | {cal_status} |
| 目标完成 | **{cal_percent}%** | {goal_status} |

{calorie_comment}

---

## 📊 健康综合评估

{overall_assessment}

{improvement_suggestion}

指标状态判断规则

类型 指标 正常范围 状态判断
步数 step_percent ≥100% 达标 / 80-99% 接近 / <80% 未达标 -
睡眠 sleep_hours 7-9h 正常 / 6-7h 偏少 / <6h 不足 / >9h 偏多 好/一般/差
血氧 oxygen ≥95% 正常 / 90-94% 偏低 / <90% 危险 正常/偏低/危险
血压 systolic 90-140 / diastolic 60-90 正常/偏高/偏低
心率 heart_rate 60-100 bpm 正常 / <60 偏低 / >100 偏高 正常/偏低/偏高
消耗 cal_percent ≥100% 达标 / 80-99% 接近 / <80% 未达标 -

数据解读与评语生成

步数评语生成:

  • 达标(≥100%):🎉 今日步数目标已达成,继续保持!
  • 接近(80-99%):💪 距离目标只差一点点了,再活动活动!
  • 未达标(<80%):🚶 今日运动量较少,建议起身活动一下

睡眠评语生成:

  • 正常(7-9h):😴 睡眠时长良好,身体得到充分休息
  • 偏少(6-7h):😪 睡眠时长略有不足,建议早点入睡
  • 不足(<6h):😫 睡眠严重不足,建议增加睡眠时间
  • 偏多(>9h):😴 睡眠时间较长,可能影响生物钟

血氧评语生成:

  • 正常(≥95%):✅ 血氧水平正常,呼吸系统健康
  • 偏低(90-94%):⚠️ 血氧略低,可能与剧烈运动或环境有关
  • 危险(<90%):🚨 血氧过低,建议就医检查

血压评语生成:

  • 均正常:✅ 血压处于正常范围,心血管健康
  • 高压偏高:⚠️ 高压略高,注意清淡饮食
  • 高压过高:🚨 高压异常,建议咨询医生
  • 低压偏低:⚠️ 低压略低,可能体质较弱
  • 低压过低:🚨 低压异常,建议咨询医生

心率评语生成:

  • 正常(60-100):✅ 心率正常,心脏功能良好
  • 偏低(<60):⚠️ 心率偏低,可能运动量大或体质较好
  • 偏高(>100):⚠️ 心率偏快,建议休息放松

消耗评语生成:

  • 达标(≥100%):🎉 今日消耗目标已达成!
  • 接近(80-99%):💪 再活动一下就能达成目标了!
  • 未达标(<80%):🔥 今日消耗较少,可以适当增加运动

综合评估生成规则

根据各项指标状态,生成综合评估:

**整体评价**:{great/good/needs_attention/poor}

{great_case}
🎉 {userName},今日健康状况非常棒!各项指标均在正常范围内,请继续保持!

{good_case}
👍 {userName},今日健康状况良好,大部分指标正常,继续保持!

{needs_attention_case}
👋 {userName},今日有部分指标需要注意,建议适当调整。

{poor_case}
⚠️ {userName},今日健康状况需要关注,建议咨询医生或调整生活习惯。

改善建议生成

根据异常指标生成针对性建议:

异常类型 建议内容
步数不足 每天步行 8000-10000 步有助于保持健康
睡眠不足 建议固定作息时间,睡前避免使用电子设备
血氧偏低 避免长时间在密闭环境,适当进行深呼吸练习
血压偏高 注意清淡饮食,减少盐分摄入,保持情绪稳定
心率偏高 避免剧烈运动和情绪激动,保持充足睡眠
消耗不足 结合有氧运动和无氧训练,提高基础代谢

无数据时回复

暂无今日健康数据。

请确保:
• amemo 服务已启动并正常运行
• 已记录今日的健康数据
• 已完成登录认证

尝试:查看我的步数数据

调用示例

用户输入:

今日健康简报

系统处理:

  1. 识别触发词:今日健康简报
  2. 检查 userToken
  3. 调用:POST /last-data with userToken: "{token}"
  4. 获取所有类型最新数据
  5. 解析并生成健康简报输出

自动保存任务调度(时间词语触发)

当用户对话中包含时间词语时,优先保存到麦小记(利用其邮件提醒功能),同时创建系统级定时任务(作为备份提醒)。

时间词语识别

时间词语 转换规则 示例
今天 / 今日 当天 00:00:00 2024-03-22 00:00:00
明天 / 明日 明天 00:00:00 2024-03-23 00:00:00
昨天 / 昨日 昨天 00:00:00 2024-03-21 00:00:00
后天 后天 00:00:00 2024-03-24 00:00:00
将来 / 未来 当前时间 + 365天 2025-03-22 00:00:00
最近 / 最新 / 近期 当天时间 + 15天 2024-04-06 00:00:00
具体日期 原样转换 用户说"12月25日" → 2024-12-25 00:00:00

时间转换优先级

  1. 精确日期匹配优先(如"12月25日")
  2. 时间词语次之(如"明天"、"下周")
  3. 无法识别时使用当前时间

自动保存任务流程(双保险机制)

1. 检测用户对话中的时间词语
    ↓
2. 提取并转换时间
    ├── 今天/今日 → 当天 00:00:00
    ├── 明天/明日 → 明天 00:00:00
    ├── 将来/未来 → 当前 + 365天
    ├── 最近/最新/近期 → 当前 + 15天
    └── 具体日期 → 解析后 00:00:00
    ↓
3. 提取待办事项
    ├── 从对话中提取任务标题(taskTitle)
    ├── 去除语气词、感叹词
    └── 保留核心任务内容
    ↓
4. 检查 userToken
    ├── 无 token → 引导登录流程
    ↓
5. 【第一优先级】保存到麦小记
    ├── 调用 amemo-save-task 接口
    ├── 利用麦小记的邮件提醒功能
    └── 失败时记录日志但不阻断流程
    ↓
6. 【第二优先级】创建系统定时任务 + 邮件提醒检查
    ├── 调用 cron.add 创建本地定时任务
    ├── 检查用户是否已设置邮件提醒邮箱
    │   ├── 已设置 → 跳过邮件配置
    │   └── 未设置 → 询问用户邮箱 → 调用 amemo-send-task 发送邮件
    └── 确保提醒必达
    ↓
7. 返回双保险保存结果

请求参数

麦小记保存参数:

参数 类型 必填 说明
userToken str 用户登录凭证
taskId str 传 null(新建任务)
taskTitle str 任务标题(从对话中提取)
taskExplain str 传 null
taskTime str 任务时间(格式:2024-12-12 00:00:00)
taskEmail list[str] 传 null

系统定时任务参数:

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

邮件提醒检查流程

创建系统定时任务时,自动检查用户邮件设置状态:

检查方式

  • 检查本地存储的用户邮箱配置(如 ~/.amemo/config.json 或环境变量)
  • 或检查麦小记返回的用户配置中是否包含邮件设置

分支处理

情况一:已设置邮件

检测到用户已配置邮件:xxx@example.com
→ 跳过邮箱询问
→ 系统定时任务将在提醒时间自动触发

情况二:未设置邮件

未检测到邮件配置
→ 提示用户:"📧 是否开启邮件提醒?请输入邮箱地址(或直接回复'跳过')"
→ 等待用户输入
    ├── 用户输入有效邮箱 → 保存配置 → 调用 amemo-send-task 发送测试邮件
    ├── 用户回复"跳过" → 仅保留系统定时任务
    └── 用户输入无效 → 提示重新输入或跳过

amemo-send-task 调用参数

当用户输入邮箱后,立即调用发送邮件:

参数 类型 必填 说明
userToken str 用户登录凭证
taskId str 传 null
taskTitle str 传 null
taskExplain str 传 null
taskTime str 任务时间
taskEmail list[str] 用户输入的邮箱列表

调用示例:

curl -X POST https://skill.amemo.cn/send-task \
  -H "Content-Type: application/json" \
  -d '{
    "userToken": "<token>",
    "taskId": null,
    "taskTitle": null,
    "taskExplain": null,
    "taskTime": "2026-03-23 07:00:00",
    "taskEmail": ["user@example.com"]
  }'

邮件发送成功回复:

✅ 邮件提醒已设置!
📧 接收邮箱:user@example.com
⏰ 提醒时间:2026-03-23 07:00:00

测试邮件已发送,请查收。

响应处理

双保险都成功时:

✅ 已为您设置双保险提醒:「{taskTitle}」
📅 时间:{taskTime}

📧 麦小记邮件提醒:已保存
⏰ 系统备份提醒:已设置

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

麦小记成功,系统失败时:

✅ 已为您保存待办:「{taskTitle}」
📅 时间:{taskTime}
📧 麦小记邮件提醒:已启用

⚠️ 系统备份提醒设置失败,但麦小记邮件提醒仍可用。

麦小记失败,系统成功时:

⚠️ 麦小记保存失败,已启用系统备份提醒
⏰ 提醒时间:{taskTime}
📋 任务:{taskTitle}

系统将在指定时间提醒您。

都失败时:

❌ 提醒设置失败

可能原因:
• 麦小记服务异常
• 系统定时任务服务异常

请检查服务状态后重试。

调用示例

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

用户输入:

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

系统处理:

  1. 检测到时间词语:明天早上
  2. 转换时间:2026-03-23 07:00:00(早上默认7点)
  3. 提取待办:早起买胡辣汤
  4. 【第一优先级】调用 POST /save-task 保存到麦小记
  5. 【第二优先级】调用 cron.add 创建系统定时任务
  6. 检查邮件配置 → 未设置
  7. 询问用户:
✅ 已为您设置双保险提醒:「早起买胡辣汤」
📅 时间:2026-03-23 07:00:00

📧 麦小记邮件提醒:已保存
⏰ 系统备份提醒:已设置

💡 是否开启邮件提醒?请输入邮箱地址(或回复"跳过"):

用户回复:

lockfeel@example.com

系统处理:
8. 验证邮箱格式
9. 保存邮箱配置到本地
10. 调用 POST /send-task 发送测试邮件
11. 返回:

✅ 邮件提醒已设置!
📧 接收邮箱:lockfeel@example.com
⏰ 提醒时间:2026-03-23 07:00:00

测试邮件已发送,请查收。
━━━━━━━━━━━━━━━━━━━━━━
📋 提醒配置总览
━━━━━━━━━━━━━━━━━━━━━━
📧 麦小记清单:已保存
⏰ 系统定时任务:已设置
📧 邮件提醒:已启用

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

示例二:已设置邮件(自动跳过询问)

用户输入:

12月25日要送礼物

系统处理:

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

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

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

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

用户输入:

后天要去医院复查

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

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

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

💡 如需开启邮件提醒,可随时说"设置邮件提醒"
  • 调用 cron.add 创建系统定时任务
  1. 返回双保险结果

自动查询任务调度

当用户说以下触发词时,自动调用 amemo-find-task 接口查询任务清单:

触发词 说明
查看我的清单 查看用户的所有任务清单
查询清单 查询任务清单
我的待办 查看待办事项
查看任务 查看任务列表
查询任务 查询已有任务
列出任务 列出所有任务
搜索任务 搜索任务

自动查询任务流程

1. 识别触发词(查看/查询/列出 + 清单/任务/待办)
    ↓
2. 检查 userToken 是否存在
    ├── 无 token → 引导登录流程
    ↓
3. 调用接口
    > 读取 modules/amemo-find-task/SKILL.md 获取请求参数
    ↓
4. 解析返回数据
    ├── todayList: 今日列表
    ├── tomorrowList: 明日列表
    ├── recentList: 近期列表(15天内)
    ├── futureList: 未来列表
    ├── finishList: 已完成列表
    └── myFollow: 我的收藏
    ↓
5. 格式化输出 Markdown

查询任务展示模板

调用成功后,根据返回数据为用户组织清晰的任务清单展示。

无数据时回复:

暂无待办清单。

你可以:
• 创建新的待办任务
• 使用「今天XXX」添加待办

任务清单展示模板:

## ✅ 待办清单

---

### 📅 今日待办 {todayCount} 项
{today_list_items}

---

### 📅 明日待办 {tomorrowCount} 项
{tomorrow_list_items}

---

### 📆 近期待办(15天内){recentCount} 项
{recent_list_items}

---

### 📋 未来待办 {futureCount} 项
{future_list_items}

---

### ⭐ 我的收藏 {followCount} 项
{follow_list_items}

---

### ✔ 已完成 {finishCount} 项
{finish_list_items}

---

### 📊 统计概览

| 分类 | 数量 |
|------|------|
| 今日待办 | {count} |
| 明日待办 | {count} |
| 近期待办 | {count} |
| 未来待办 | {count} |
| 我的收藏 | {count} |
| 已完成 | {count} |
| **总计** | **{count}** |

调用示例

用户输入:

查看我的待办清单

系统处理:

  1. 识别触发词:查看我的清单
  2. 检查 userToken
  3. 调用:POST /find-task with userToken: "{token}"
  4. 解析返回数据,按分类组织展示

用户输入:

查询任务

系统处理:

  1. 识别触发词:查询任务
  2. 检查 userToken
  3. 调用:POST /find-task with userToken: "{token}"
  4. 格式化输出给用户

邮件提醒设置流程

创建待办清单后,自动询问用户是否需要开启邮件提醒,并支持本地定时任务设置。

创建清单后的邮件提醒询问

✅ 已为您保存待办:「{taskTitle}」
📅 时间:{taskTime}

是否需要开启邮件提醒?
• 是 - 请输入接收提醒的邮箱
• 否 - 稍后提醒我

用户选择"是"后的流程

请输入接收提醒的邮箱地址:
示例:user@example.com

邮箱格式验证

正则表达式: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

验证失败回复:

❌ 邮箱格式不正确,请重新输入:
示例:user@example.com

验证成功回复:

✅ 邮箱格式验证通过

📧 提醒设置:
• 任务:「{taskTitle}」
• 提醒时间:{taskTime}
• 接收邮箱:{email}

是否确认设置?
• 确认 - 开启提醒
• 修改 - 重新输入邮箱

本地定时任务设置

确认后,在本地创建定时任务:

✅ 邮件提醒已设置!

⏰ 提醒详情:
• 任务:{taskTitle}
• 时间:{taskTime}
• 邮箱:{email}

到达提醒时间后,将自动发送邮件通知。

定时任务执行流程

1. 定时任务触发(到达 taskTime)
    ↓
2. 调用 amemo-send-task 接口
    > 读取 modules/amemo-send-task/SKILL.md 获取请求参数
    ↓
3. 发送邮件提醒
    ↓
4. 记录发送状态

调用示例

用户输入:

明天要去开会,发邮件到 test@example.com

系统处理:

  1. 提取任务:开会
  2. 转换时间:2024-03-23 00:00:00
  3. 保存清单:调用 /save-task
  4. 询问邮件提醒:用户选择"是"
  5. 获取邮箱:test@example.com
  6. 验证格式:通过
  7. 设置定时任务:明天 00:00:00 执行
  8. 到期执行:调用 /send-task 发送邮件

注意事项

  • 本地定时任务由 amemo-skill 管理,到期自动调用 amemo-send-task 发送邮件
  • 邮件发送依赖 amemo 服务正常运行
  • 支持设置多个邮箱,用逗号分隔

调度流程

当用户提出请求时,按以下步骤操作:

  1. 确认服务状态 — 确保 amemo 服务已启动(python skill.py,端口 8092)
  2. 识别用户意图 — 根据用户需求判断应调用哪个子模块
  3. 检查认证状态 — 除登录/验证码外,所有接口需要 userToken。若未获取 token,先调用 amemo-login
  4. 调度子模块 — 读取对应模块的 SKILL.md 执行具体请求

子模块索引

所有子模块位于 modules/ 目录,每个子模块对应一个 API 端点。详细请求/响应示例请查阅各子模块 SKILL.md:

模块 路由 作用
amemo-send-code POST /send-code 发送手机验证码
amemo-login POST /login 用户登录获取 token
amemo-save-memo POST /save-memo 保存笔记
amemo-find-memo POST /find-memo 查询笔记
amemo-save-task POST /save-task 保存任务
amemo-find-task POST /find-task 查询任务
amemo-send-task POST /send-task 发送任务(邮件提醒)
amemo-find-data POST /find-data 查询健康数据
amemo-last-data POST /last-data 健康简报
amemo-init-mate POST /init-mate 刷新助手记忆
amemo-save-mate POST /save-mate 保存永久记忆

注意:AI 助手模块仅适用于 OpenClaw 或基于 OpenClaw 开发的软件。

自动刷新助手记忆调度

当用户说以下触发词时,自动调用 amemo-init-mate 接口,并用返回的 mateMemory 数据更新本地 MEMORY.md:

触发词 说明
刷新助手记忆 同步 AI 助手记忆到本地
初始化助手记忆 初始化 AI 助手记忆
重置记忆 重置 AI 助手记忆

前提:仅在 OpenClaw 或基于 OpenClaw 开发的应用中生效,其他 AI 工具(如 Claude Code)不支持此功能。

自动刷新记忆流程

1. 识别触发词(刷新/初始化/重置 + 助手记忆)
    ↓
2. 检查 userToken 是否存在
    ├── 无 token → 引导登录流程
    ↓
3. 检查 memory 目录是否存在
    ├── 不存在 → 自动创建 memory 目录
    ↓
4. 调用接口
    > 读取 modules/amemo-init-mate/SKILL.md 获取请求参数
    ↓
5. 解析响应
    └── data.mateMemory: AI 助手记忆内容(Markdown 格式)
    ↓
6. 更新本地 MEMORY.md
    ├── 如果 memory 目录不存在 → 先创建
    ├── 写入 mateMemory 内容到 memory/MEMORY.md
    ↓
7. 返回结果给用户

接口响应解析

读取 modules/amemo-init-mate/SKILL.md 获取完整响应数据结构

更新 MEMORY.md 模板

mateMemory 内容完整写入 memory/MEMORY.md

{mateMemory}

成功提示模板

✅ 助手记忆已刷新!

已同步 {count} 条记忆信息到本地 MEMORY.md

记忆内容包括:
• 用户偏好设置
• 工作习惯和规律
• 常用工具和技术栈
• 个人目标和关注点

现在 AI 助手将根据您的记忆提供更个性化的服务。

失败处理

文件写入失败时:

⚠️ 记忆同步失败:无法写入 MEMORY.md 文件

可能原因:
• 目录权限不足
• 磁盘空间已满

请检查后重试,或联系管理员。

接口调用失败时:

⚠️ 无法获取助手记忆,请检查:
• amemo 服务是否正常运行
• 网络连接是否正常

错误信息:{error_message}

调用示例

用户输入:

刷新助手记忆

系统处理:

  1. 识别触发词:刷新助手记忆
  2. 检查 userToken
  3. 检查/创建 memory 目录
  4. 调用:POST /init-mate with userToken: "{token}"
  5. 获取 data.mateMemory 内容
  6. 写入 memory/MEMORY.md 文件
  7. 输出成功提示

自动保存永久记忆调度

注意:此功能仅适用于 OpenClaw 或基于 OpenClaw 开发的软件。

当用户说以下触发词时,等待 MEMORY.md 更新完成后,调用 amemo-save-mate 接口,将本地 MEMORY.md 内容同步到服务器:

触发词 说明
保存永久记忆 将本地记忆同步到云端
永久记住 XXX 记住指定内容并同步
记住这个 记住当前内容并同步

自动保存永久记忆流程

1. 识别触发词(保存永久记忆/永久记住/记住这个)
    ↓
2. 检查 userToken 是否存在
    ├── 无 token → 引导登录流程
    ↓
3. 确认 MEMORY.md 是否已更新
    ├── 未更新 → 提示用户先完成编辑
    ↓
4. 读取 memory/MEMORY.md 文件内容
    ↓
5. 调用接口
    > 读取 modules/amemo-save-mate/SKILL.md 获取请求参数
    ↓
6. 返回保存结果

保存触发场景

场景一:用户刚说完"永久记住 XXX"

用户:永久记住我喜欢用 Python 写后端服务
    ↓
系统识别触发词,等待用户确认或自动补充到 MEMORY.md
    ↓
用户完成 MEMORY.md 编辑(如通过其他工具)
    ↓
用户说"保存永久记忆"
    ↓
系统读取 MEMORY.md 内容
    ↓
调用 /save-mate 同步到服务器

场景二:用户主动保存

用户:保存永久记忆
    ↓
系统读取当前 MEMORY.md 内容
    ↓
调用 /save-mate 同步到服务器

接口请求参数

读取 modules/amemo-save-mate/SKILL.md 获取完整请求参数和响应数据

成功提示模板

✅ 永久记忆已保存!

已同步 {lines} 行记忆内容到云端

记忆概要:
• 偏好设置:{preferences_summary}
• 工作习惯:{habits_summary}
• 技术栈:{tech_summary}

您的记忆将在所有设备间同步。

失败处理

MEMORY.md 不存在时:

⚠️ 暂无本地记忆可保存

请先:
1. 使用「刷新助手记忆」获取云端记忆
2. 或直接编辑 memory/MEMORY.md 添加内容

然后再说「保存永久记忆」

读取失败时:

⚠️ 无法读取本地记忆文件

请检查 memory/MEMORY.md 是否存在且可读。

接口调用失败时:

⚠️ 记忆保存失败

错误信息:{error_message}

请检查网络连接后重试。

调用示例

用户输入:

保存永久记忆

系统处理:

  1. 识别触发词:保存永久记忆
  2. 检查 userToken
  3. 读取 memory/MEMORY.md 内容
  4. 调用:POST /save-mate with mateMemory: "{文件内容}"
  5. 输出保存结果

用户输入:

永久记住我常用 TypeScript 开发前端

系统处理:

  1. 识别触发词:永久记住 + 关键词 TypeScript 前端
  2. 将内容追加/更新到 MEMORY.md
  3. 调用:POST /save-mate 同步到服务器
  4. 输出保存结果

认证流程

/login/send-code 外,所有请求需携带 userToken

用户请求 → 检查是否有 token → 无 → 调用 amemo-login → 获取 token→ 有 → 调用目标子模块

使用方式

读取子模块目录下的 SKILL.md 获取完整的请求参数和 curl 示例,然后执行 HTTP 请求。

子模块路径格式:modules/<模块名>/SKILL.md

例如用户要"保存一条笔记":

  1. 读取 modules/amemo-save-memo/SKILL.md
  2. 按参数格式构造请求
  3. 用 curl 发送 POST 请求到 https://skill.amemo.cn/save-memo