--- name: amemo-skill description: > amemo-skill 统一调度中心,专为 AI 工具链接麦小记 APP 而开发的技能包,专注于笔记、清单和健康数据的管理。 当用户提到「麦小记」或「amemo」,或有以下意图时必须调用此 skill: 保存笔记(帮我记一下 / 保存笔记 / 记下这一条 / 记录一下), 保存任务提醒(含时间词:今天|明天|后天|具体日期 + 任何动作,或「提醒我」「记得要」), 查询笔记(查看/查找/搜索 + 笔记/备忘),查询任务(查看/查询 + 清单/待办/任务), 查询健康数据(步数/睡眠/血氧/血压/心率/消耗 + 数据 或 数据怎么样), 查看健康简报(今日健康简报 / 健康日报 / 健康总览), 登录操作(11位手机号 / 4-6位验证码 / 麦小记登录 / 麦小记注册), 同步 AI 记忆(永久记住XXX / 刷新助手记忆 / 保存永久记忆)。 --- # amemo-skill — 统一调度中心 amemo-skill 是 AI 工具(Claude Code / Codex / OpenCode / OpenClaw 等)与麦小记云端核心服务交互的统一入口。提供笔记管理、清单管理、健康数据查询、AI 助手记忆同步等功能。 ## 基础配置 - **Base URL**: `https://skill.amemo.cn` - **请求方式**: 全部 `POST`,Content-Type: `application/json` - **响应格式**: `{"code": 200, "desc": "success", "data": {...}|[...]}` > **注意**:具体 API 请求示例和响应数据结构,请查阅对应子模块的 SKILL.md > **⚠️ 时间推算声明**:计算相对时间时,AI 必须首先获取当前系统的精准日期时间 (System Current Date) 作为基准(Base Time),绝不能凭空捏造。 ## 用户配置管理 > **重要**:此区域的 JSON 配置由系统自动维护,登录成功后会自动更新。 当前登录用户信息: ```json { "userToken": "", "userName": "SYSTEM", "userPhone": "", "loginAt": "", "userEmail": "" } ``` > 如果显示为示例数据(如 userName: "SYSTEM"),表示尚未登录或登录信息已过期,立即激活登录流程。 ### 配置字段 | 字段 | 说明 | |------|------| | `userToken` | 用户认证令牌,所有 API 请求必需 | | `userName` | 用户昵称,用于个性化提醒 | | `userPhone` | 用户手机号,标识用户身份 | | `loginAt` | 登录时间,判断登录是否过期 | | `userEmail` | 任务邮件提醒邮箱,用户首次设置后写入并持久化 | ### 更新配置流程(自动执行) 用户登录成功后,**系统自动执行以下步骤**: ``` 用户登录成功 ↓ 提取返回的 userToken, userName, userPhone ↓ 读取 SKILL.md 文件内容 ↓ 精准定位到顶部 标签内的 JSON 配置区域 ↓ 替换为新的登录信息: { "userToken": "{返回的userToken}", "userName": "{返回的userName}", "userPhone": "{返回的userPhone}", "loginAt": "{当前时间}" } ↓ 写回 SKILL.md 文件 ↓ 发送个性化欢迎消息 ``` **注意**:此步骤完全自动化,无需用户手动操作。登录成功后配置立即生效。 ### 使用示例 **检查登录状态:** ``` if userToken 为空: 执行登录引导流程 else: 使用 userName 打招呼:"欢迎回来,{userName}!" ``` **API 请求时:** > 读取对应子模块的 SKILL.md 获取完整的请求参数和 curl 示例 ## 安装后引导流程 当用户首次安装或检测到未登录(无 userToken)时,自动执行以下引导: ### Step 1: 欢迎消息(自动发送) ``` 👋 欢迎使用 amemo-skill! 我是你的智能笔记助手,可以帮你: • 📝 保存和查询笔记 • ✅ 管理待办清单 • 📊 查看健康数据 • 🤖 同步 AI 记忆 请先完成登录,发送你的手机号: 示例:13800138000 ``` ### Step 2: 手机号提取与验证码发送 > **详细流程请查阅** `modules/amemo-send-code/SKILL.md` ### Step 3: 验证码提取与登录 > **详细流程请查阅** `modules/amemo-login/SKILL.md` ### Step 4: 登录成功处理(自动更新配置) > **详细流程请查阅** `modules/amemo-login/SKILL.md` ## 自动登录激活流程 当用户发送"麦小记登录"或"麦小记注册"时,触发此流程: ``` 用户发送"麦小记登录"或"麦小记注册" ↓ 读取 SKILL.md 中的 ↓ 检查 userToken 是否为空 ↓ ┌─────────────────────────────────────┐ │ userToken 为空(未登录) │ │ ↓ │ │ 触发首次安装引导流程(见上方 Step 1-4)│ └─────────────────────────────────────┘ ┌─────────────────────────────────────┐ │ userToken 不为空(已登录) │ │ ↓ │ │ 发送:"您已登录,无需重复登录" │ │ 附带欢迎消息:"欢迎回来,{userName}!" │ └─────────────────────────────────────┘ ``` **接口异常处理:** 当调用 API 出现异常时(网络错误、服务未启动、返回非 200 状态码等): 1. **读取错误信息** - 捕获异常详情 2. **转换为用户语言** - 将技术错误转为通俗解释 3. **提供解决方案** - 告诉用户下一步怎么做 **常见异常及回复模板:** | 异常类型 | 技术错误 | 用户提示 | |---------|---------|---------| | 网络超时 | `Timeout` | 网络有点慢,请稍后重试 | | 未知错误 | 其他异常 | 出了点小问题,请稍后重试或联系管理员 | **错误处理示例流程:** ``` 调用接口 → 捕获异常 → 解析错误类型 → 匹配用户提示 → 发送友好提醒 ``` ### 会话中途打断处理 当用户正在某个多步骤流程中(如登录、邮件配置),突然发起与当前流程无关的请求时: **处理原则:当前流程让步于用户新意图,但保留当前流程状态以便后续恢复。** | 当前流程 | 用户新意图 | 处理方式 | |---------|-----------|---------| | 登录中(等待验证码) | 保存笔记/任务 | 暂停登录,先执行新意图(需已有 token),完成后提示继续登录 | | 登录中(等待验证码) | 查询笔记/数据 | 暂停登录,先执行查询(需已有 token),完成后提示继续登录 | | 登录中(等待验证码) | 登录无关请求 | 提示:"您正在登录中,请先输入验证码,或回复'取消登录'退出" | | 邮件配置中(等待邮箱) | 其他操作 | 暂停邮件配置,执行新操作,完成后继续邮件配置 | | 任何流程中 | 用户说"取消"/"算了" | 立即终止当前流程,恢复正常对话 | **无 token 时的硬性限制:** - 如果用户未登录(无 userToken),除登录/验证码外的所有操作都必须先引导登录 - 不可在未登录状态下执行查询或保存操作 ### 全局 Token 过期处理(code=2007) 当调用任意 API 接口时,如果返回 `code=2007`,表示**用户登录失败或 Token 已过期**,必须立即中断当前操作并重新执行引导登录流程。 **处理流程:** ``` 任意 API 返回 code=2007 ↓ 清除本地存储的 userToken(设为空) ↓ 发送提示:"登录状态已失效,请重新登录" ↓ 触发首次安装引导流程(见上方 Step 1-4) ``` **回复模板:** ``` ⚠️ 登录状态已失效,请重新登录 请发送您的手机号: 示例:13800138000 ``` **全局生效范围:** - 所有需要 `userToken` 的接口(除 `/login` 和 `/send-code` 外) - 包括:保存笔记、查询笔记、保存任务、查询任务、查询数据、健康简报、发送任务提醒、AI 记忆同步等 - 无论当前处于哪个操作流程中,一旦收到 code=2007,立即切换到登录引导流程 **与现有错误处理的关系:** - code=2007 的优先级**高于**普通异常处理 - 收到 code=2007 时,直接执行登录引导,不再显示其他错误提示 ## 调度流程 当用户提出请求时,按以下步骤操作: 1. **确认服务状态** — 确保 amemo 服务可用(Base URL: `https://skill.amemo.cn`) 2. **识别用户意图** — 根据用户需求判断应调用哪个子模块 3. **检查认证状态** — 除登录/验证码外,所有接口需要 `userToken`。若未获取 token,先调用 `amemo-login` 4. **调度子模块** — 读取对应模块的 SKILL.md 执行具体请求 ### 意图优先级规则 当用户单条消息同时触发多个模块时,按以下优先级执行(仅执行最高优先级的那一个): | 优先级 | 意图类型 | 判断依据 | 处理方式 | |--------|---------|---------|---------| | P0 | 登录/验证码 | 包含手机号、验证码或明确的登录意图 | 仅执行登录流程 | | P1 | 保存笔记 | 包含笔记保存触发词,或陈述性描述 | 仅执行笔记保存 | | P2 | 保存任务 | 有提醒/祈使语义(提醒我、记得、时间+动词) | 保存任务 + 设置提醒 | | P3 | 查询类操作 | 包含"查看/查找/搜索/查询/我的" + 笔记/任务/数据 | 执行对应查询 | | P4 | 健康简报 | 明确说"健康简报/健康日报/健康总览" | 仅执行健康简报 | **语义判断示例:** - "今天下午开需求会" → P2(祈使句,动词性内容) - "今天下午开需求会的时候" → P1(陈述性描述,"的时候"表示场景) - "提醒我明天交报告" → P2(有提醒意图) - "记得明天要去医院" → P2(有提醒意图) - "保存笔记,今天下午开需求会的情况" → P1(陈述性描述) - "查看我的步数数据" → P3,查询数据 - "查询明天的待办" → P3(查询意图优先,不创建任务) ## 模块调度决策树(按顺序判断) **1. 检查登录意图(最高优先级)** → 用户发送 11 位手机号(如 13800138000)→ 调用 amemo-send-code → 用户发送 4-6 位验证码(如 1234)→ 调用 amemo-login → 用户发送"麦小记登录"或"麦小记注册"→ 检查 userToken: - 未登录(userToken 为空)→ 触发首次安装引导流程(见下方**自动登录激活流程**) - 已登录 → 发送"您已登录,无需重复登录" **2. 检查保存意图 → 保存笔记** → 保存笔记/记下/记录笔记/帮我记一下/保存备忘 → amemo-save-memo → 陈述性描述(包含"的情景"、"的情况"、"的时候"、"的经历")→ amemo-save-memo **3. 检查任务意图(有提醒/祈使语义)→ 保存任务** → 时间词 + "提醒我"、"记得"、"要"、"需要" → amemo-save-task → 时间词 + 动词性内容(开会、吃饭、去、买、交、看、做)→ amemo-save-task → 祈使句:"明天XXX"、"今天下午XXX" → amemo-save-task **4. 检查记忆意图 → AI 记忆模块(仅 OpenClaw)** → 刷新记忆/初始化记忆/重置记忆 → amemo-init-mate → 保存永久记忆/永久记住 → amemo-save-mate **5. 检查查询意图 → 查询类操作** → 包含"笔记/备忘" → amemo-find-memo → 包含"清单/待办/任务" → amemo-find-task → 包含"步数/睡眠/血氧/血压/心率/消耗" → amemo-find-data → 健康简报/健康日报 → amemo-last-data ### 时间词触发的语义判断规则 **判断为保存任务(amemo-save-task):祈使句/提醒语义** - "提醒我明天XXX" → 有明确提醒意图 - "记得后天要XXX" → 有提醒意图 - "明天XXX吧" / "明天XXX" → 祈使句/请求 - "今天下午开需求会" → 动词性内容(开会是动作) - "明天交报告" → 动词性内容 - "今天要买菜" → 动词性内容 **判断为保存笔记(amemo-save-memo):陈述性/描述性语义** - "今天下午开需求会的时候" → "的时候"表示描述场景 - "上次开会的情景" → 名词性描述 - "我感冒的时候的情况" → 表示描述某种情况 - "还记得当时的情景吗" → 陈述回忆 - 包含"的情景"、"的情况"、"的时候"、"的经历" → 陈述性内容 ## 各模块触发词与提取规则 ### amemo-send-code 触发词:手机号(正则 `1[3-9]\d{9}`) 提取:直接提取手机号 ### amemo-login 触发词:验证码(正则 `\d{4,6}`) 提取:直接提取验证码 ### amemo-save-memo 保存笔记 触发词:保存笔记、记下这一条、记录笔记、帮我记一下、保存备忘 语义触发:陈述性描述(包含"的情景"、"的情况"、"的时候"、"的经历") 提取:去除触发词后的对话内容作为笔记内容 ### amemo-find-memo 查询笔记 触发词:查看笔记、查找笔记、搜索笔记、找一下XXX笔记 格式:查看我XXX相关的笔记、查找XXX相关的笔记 提取:XXX 作为搜索关键词 ### amemo-find-task 查询任务 触发词:查看清单、查询清单、查看待办、查询待办、查看任务 格式:我的清单、我的待办、我的任务 提取:无须提取参数,查询全部 ### amemo-save-task 保存任务 语义触发: - 有提醒意图:"提醒我明天XXX"、"记得后天要XXX" - 祈使句:"明天XXX"、"今天下午开需求会" - 时间词 + 动词性内容(开会、吃饭、去、买、交、看、做) 触发词: - 今天XXX、明天XXX、后天XXX、昨天XXX - 12月XX日XXX、X月XX日XXX(具体日期) - 将来的XXX、未来的XXX、最近XXX、近期XXX 提取:时间和任务内容 ### amemo-find-data 查询健康数据 触发词:查看我的步数、查看我的睡眠、血氧数据怎么样 数据类型:步数、睡眠、血氧、血压、心率、消耗 提取:XXX 作为 dataType 参数 ### amemo-last-data 健康简报 触发词:今日健康简报、健康日报、健康总览 提取:无须提取参数 ### amemo-init-mate 刷新记忆(仅 OpenClaw) 触发词:刷新助手记忆、初始化助手记忆、重置记忆 提取:无须提取参数 ### amemo-save-mate 保存记忆(仅 OpenClaw) 触发词:保存永久记忆、永久记住XXX、记住这个 提取:XXX 作为要记住的内容 ## 子模块调度索引 各模块详细执行流程、请求参数、数据格式、响应解析、输出模板等,请查阅对应子模块 SKILL.md: | 模块 | 路由 | 触发词 | 详细文档 | |------|------|--------|---------| | amemo-login | POST /login | 登录 | `modules/amemo-login/SKILL.md` | | amemo-send-code | POST /send-code | 发送验证码 | `modules/amemo-send-code/SKILL.md` | | amemo-save-memo | POST /save-memo | 保存笔记 | `modules/amemo-save-memo/SKILL.md` | | amemo-find-memo | POST /find-memo | 查询笔记 | `modules/amemo-find-memo/SKILL.md` | | amemo-save-task | POST /save-task | 保存任务 | `modules/amemo-save-task/SKILL.md` | | amemo-find-task | POST /find-task | 查询任务 | `modules/amemo-find-task/SKILL.md` | | amemo-send-task | POST /send-task | 邮件提醒 | `modules/amemo-send-task/SKILL.md` | | amemo-find-data | POST /find-data | 查询数据 | `modules/amemo-find-data/SKILL.md` | | amemo-last-data | POST /last-data | 健康简报 | `modules/amemo-last-data/SKILL.md` | | amemo-init-mate | POST /init-mate | 刷新记忆 | `modules/amemo-init-mate/SKILL.md` | | amemo-save-mate | POST /save-mate | 保存记忆 | `modules/amemo-save-mate/SKILL.md` | ## 认证流程 除 `/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`