Install
openclaw skills install amemo-skillamemo-skill 统一调度中心,专为 AI 工具链接麦小记 APP 而开发的技能包,专注于笔记、清单和健康数据的管理。 何时用: 当用户提到「麦小记」或「amemo」,或涉及以下意图时立即调用。 触发词: 保存笔记(帮我记一下/save note/记录一下) | 任务提醒(提醒我/今天去/记得要/remind me) | 查询笔记(查看笔记/找笔记/find my notes) | 查询任务(查看待办/check tasks) | 健康数据(步数/睡眠/血压/health data) | 健康简报(健康怎么样/health summary) | 登录(麦小记登录/登录麦小记/手机号+验证码/login) | AI记忆(永久记住/刷新助手记忆/save memory)。 何时不用: 用户日常含数字的对话(如"100块钱""2026年3月")不触发登录/验证码流程。
openclaw skills install amemo-skillamemo-skill 是 AI 工具(Claude Code / Codex / OpenCode / OpenClaw 等)与麦小记云端核心服务交互的统一入口。提供笔记管理、清单管理、健康数据查询、AI 助手记忆同步等功能。
https://skill.amemo.cnPOST,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 | 任务邮件提醒邮箱,用户首次设置后写入并持久化 |
用户登录成功后自动调用,更新 SKILL.md 中的用户配置: BEGIN UpdateUserConfig(token, name, phone) READ SKILL.md 文件内容 LOCATE 标签内的 JSON 配置区域 PRESERVE existing userEmail (首次设置后持久化,后续不覆盖) REPLACE JSON 为: { "userToken": "{token}", "userName": "{name}", "userPhone": "{phone}", "loginAt": "{当前时间}", "userEmail": "{保留原值}" } WRITE SKILL.md 文件 SEND 个性化欢迎消息 END
注意:此步骤完全自动化,无需用户手动操作。登录成功后配置立即生效。
BEGIN CheckLoginStatus() IF userToken IS empty THEN CALL LoginGuide() ELSE SEND "欢迎回来,{userName}!" END IF END
当用户首次安装或检测到未登录(无 userToken)时,自动执行以下引导:
欢迎使用 amemo-skill!
我是你的智能笔记助手,可以帮你:
请先完成登录,发送你的手机号: 示例:13800138000
SET context = "等待输入手机号"
Step 2: 手机号提取与验证码发送 → 详见 modules/amemo-send-code/SKILL.md Step 3: 验证码提取与登录 → 详见 modules/amemo-login/SKILL.md Step 4: 登录成功处理(自动更新配置)→ 详见 modules/amemo-login/SKILL.md
用户发送"麦小记登录"或"麦小记注册"时触发: BEGIN AutoLoginTrigger() READ IF userToken IS empty THEN CALL FirstTimeGuide() /** 执行 Step 1-4 首次安装引导, Step 1 会设置 context = "等待输入手机号" */ ELSE SEND "您已登录,无需重复登录。欢迎回来,{userName}!" END IF END
所有 API 返回 {"code": N, "desc": "...", "data": ...},按优先级处理:
BEGIN HandleError(code, desc, isNetworkError)
/** 优先级: code=2007 > 网络错误 > 其他错误 /
IF code == 2007 THEN
/* Token过期: 清空当前token, 引导重新登录 */
CLEAR userToken
CALL LoginGuide()
SEND "登录状态已失效,请重新登录"
ABORT current flow
ELSE IF isNetworkError THEN
RETRY once with 2s delay
IF still fail THEN SEND "网络有点慢,请稍后重试"
ELSE IF code != 200 THEN
SEND desc OR "出了点小问题,请稍后重试"
END IF
END
| 模块 | 错误场景 | 用户提示 |
|---|---|---|
| amemo-send-code | 手机号格式错误 | ❌ 手机号格式不正确,请发送正确的 11 位手机号 |
| amemo-login | 验证码错误/过期 | ❌ 验证码错误或已过期,请重新发送验证码 |
| amemo-send-task | 邮箱格式错误 | ❌ 邮箱格式不正确,请重新输入 |
| amemo-save-mate | MEMORY.md 不存在 | ⚠️ 暂无本地记忆可保存,请先刷新助手记忆 |
| amemo-find-memo | 无匹配笔记 | 🔍 未找到「{关键词}」相关笔记 |
| amemo-find-task | 无待办 | 📋 暂无待办清单 |
| amemo-find-data | 无数据 | 暂无今日健康数据 |
| amemo-last-data | 无数据 | 暂无今日健康数据 |
用户在多步骤流程中发起无关请求时的处理策略: BEGIN HandleInterrupt(newIntent) IF newIntent CONTAINS "取消" OR "算了" THEN CLEAR context RETURN 正常对话 END IF
/** 登录中等待验证码时的分支处理 */ IF context == "等待输入验证码" THEN IF newIntent IN (保存笔记, 保存任务) AND hasToken THEN PAUSE context → EXECUTE newIntent → PROMPT "请继续输入验证码完成登录" ELSE IF newIntent IN (查询笔记, 查询数据) AND hasToken THEN PAUSE context → EXECUTE newIntent → PROMPT "请继续输入验证码完成登录" ELSE IF newIntent UNRELATED THEN PROMPT "您正在登录中,请先输入验证码,或回复'取消登录'退出" END IF END IF
/** 邮件配置等待邮箱时的处理 */ IF context == "等待输入邮箱" THEN PAUSE context → EXECUTE newIntent → RESUME 邮件配置 END IF
/** 笔记操作确认等待时的处理 */ IF context == "等待笔记操作确认" THEN PAUSE context → EXECUTE newIntent → RESUME 笔记确认 END IF
/** 无 token 时的硬性限制 */ IF NOT hasToken AND newIntent NOT IN (登录, 发送验证码) THEN REDIRECT to 登录引导流程 END IF END
对话状态速查表 — context 字段用于意图路由分支判断:
| context 值 | 触发条件 | 退出条件 | 期间行为 |
|---|---|---|---|
等待输入手机号 | 触发自动登录引导 | 收到11位手机号→send-code | 仅接受数字 |
等待输入验证码 | send-code 成功 | 收到4-6位数字→login | 允许并行执行有token的操作 |
等待笔记操作确认 | 保存笔记确认后 | 用户选择新建/更新/取消 | 允许并行执行其他操作 |
等待输入邮箱 | 任务邮件配置触发 | 收到有效邮箱/跳过 | 允许并行执行其他操作 |
| (空) | 话题切换时 | — | 正常路由 |
lastMemoId/lastMemoTitle: 保存笔记成功后暂存,话题切换或10轮后清除。 lastTaskId: 保存任务成功后暂存,话题切换或10轮后清除。
前置检查: 每次路由前先读
<amemo-user-config>,若 userToken 为空且非登录相关意图,直接重定向到登录引导。
按优先级顺序判断,命中即执行,不再继续判断: BEGIN RouteIntent(userInput) /** P0: 登录/验证码(最高优先级)*/ /** 上下文约束: 仅在以下场景触发:
/** P1: 保存笔记 / /* 歧义消解: 时间词+动词→任务(P2); 时间词+场景词→笔记(P1) / IF has 触发词(保存笔记, 记下这一条, 记录笔记, 帮我记一下, 保存备忘) OR has 场景词(的情景, 的情况, 的时候, 的经历) THEN /* 检查点: 保存前向用户确认内容,防止误保存 */ PARSE 用户输入 → 提取标题和内容摘要 PROMPT "📝 确认保存笔记?\n标题: {标题}\n内容: {摘要}" IF 用户确认 THEN DISPATCH amemo-save-memo ELSE ABORT END IF END IF
/** P2: 保存任务 / IF has 时间词 AND (has 提醒词(提醒我, 记得, 要, 需要) OR has 动词(开会, 吃饭, 去, 买, 交, 看, 做)) THEN /* 检查点: 保存任务前向用户确认时间和内容 */ PARSE 用户输入 → 提取任务标题、时间、说明 PROMPT "✅ 确认保存任务?\n标题: {标题}\n时间: {时间}" IF 用户确认 THEN DISPATCH amemo-save-task ELSE ABORT END IF END IF
/** P3: AI 记忆(仅 OpenClaw)*/ IF CONTAINS "刷新助手记忆" OR "初始化助手记忆" OR "重置记忆" THEN DISPATCH amemo-init-mate END IF IF CONTAINS "保存永久记忆" OR "永久记住" OR "记住这个" THEN DISPATCH amemo-save-mate END IF
/** P4: 查询类操作(查询意图优先于保存)*/ /** 意图分类前置: 先判查询意图再匹配关键词,避免漏判/误判
/** Fallback: 未命中任何意图 */ IF no match THEN SEND "抱歉,我没理解你的意思,可以试试:保存笔记、查询待办、查看健康数据等" END IF END
各模块详细执行流程、请求参数、数据格式、响应解析、输出模板等,请查阅对应子模块 SKILL.md:
| 模块 | 路由 | 触发词 | 详细文档 |
|---|---|---|---|
| amemo-login | POST /login | 4-6位数字验证码 | 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 |
服务端要求:所有字段必须存在于请求体中。可选字段不传值时传
null,不可省略字段。
| 模块 | 必填字段(非空) | 可选字段(可 null) |
|---|---|---|
| amemo-send-code | phone | code (传 null) |
| amemo-login | phone, code | — |
| amemo-save-memo | userToken, memoTitle, memoContent | memoId (新建传 null) |
| amemo-find-memo | userToken, memoTitle | memoId, memoContent |
| amemo-save-task | userToken, taskTitle, taskTime | taskId, taskExplain, taskEmail |
| amemo-find-task | userToken | taskId, taskTitle, taskTime, taskEmail |
| amemo-send-task | userToken, taskTime, taskEmail | taskId, taskTitle, taskExplain |
| amemo-find-data | userToken, dataType | — |
| amemo-last-data | userToken | dataType (传 null) |
| amemo-init-mate | userToken | mateMemory (传 null) |
| amemo-save-mate | userToken, mateMemory | — |
不同 AI 工具在以下方面存在差异,调用时注意适配: BEGIN AdaptTools() HTTP_REQUEST → 使用 bash 执行 curl 命令 FILE_EDIT → 直接读写 SKILL.md 中的 区域 SCHEDULED_TASK → Claude Code: Scheduled tool; 其他: 内置定时能力或跳过 SCRIPT_EXEC → python3 scripts/parse_time.py(文件路径: 项目根目录/scripts/parse_time.py,需 Python 3.10+) 用法示例: python3 scripts/parse_time.py "明天下午3点开会" 输出: JSON {"intent": "task"|"memo", "pairs": [...], "base_time": "..."}
/** 如果不支持定时任务,仅保存任务到麦小记,邮件提醒仍可用 */ END
读取子模块目录下的 SKILL.md 获取完整的请求参数和 curl 示例,然后执行 HTTP 请求。
子模块路径格式:modules/<模块名>/SKILL.md
BEGIN ExecuteModule(moduleName)
READ modules/{moduleName}/SKILL.md
PARSE 请求参数和 curl 示例
BUILD curl POST request to https://skill.amemo.cn/{route}
EXECUTE curl POST request to https://skill.amemo.cn/{route}
IF curl fails (timeout/connection) THEN
CALL HandleError(null, null, true)
ELSE
PARSE response JSON
CALL HandleError(code, desc, false)
END IF
END
用户输入
├─ 含登录/注册词 → 检查 token → 无: 引导登录 / 有: "已登录"
├─ 手机号 + context=等待手机号 → 发送验证码
├─ 验证码 + context=等待验证码 → 验证登录
├─ 保存笔记触发词 → 提取内容 → 确认 → 调用 save-memo
├─ 时间词 + 提醒词 → 提取任务 → 确认 → 调用 save-task
├─ 查询词 + 笔记/备忘 → 调用 find-memo
├─ 查询词 + 清单/待办 → 调用 find-task
├─ 健康数据词 → 调用 find-data / last-data
├─ AI记忆词 → 调用 init-mate / save-mate
└─ 无匹配 → "抱歉,我没理解..."
场景: 用户发送 "麦小记登录" → 收到手机号 13800138000 → 输入验证码 123456 → "帮我记一下,今天和产品团队开了需求会"
1. 用户: "麦小记登录"
→ AutoLoginTrigger() → userToken 为空 → FirstTimeGuide()
→ 发送欢迎消息 → context = "等待输入手机号"
2. 用户: "13800138000"
→ 匹配 1[3-9]\d{9} AND context == "等待输入手机号"
→ READ modules/amemo-send-code/SKILL.md → curl POST /send-code {phone: "13800138000"}
→ code=200 → context = "等待输入验证码"
3. 用户: "123456"
→ 匹配 \d{4,6} AND context == "等待输入验证码"
→ READ modules/amemo-login/SKILL.md → curl POST /login {phone, code}
→ code=200, data.userToken=xxx → UpdateUserConfig() → 写 SKILL.md
→ 发送 "欢迎回来!" → context = (空)
4. 用户: "帮我记一下,今天和产品团队开了需求会"
→ RouteIntent → P1 保存笔记触发词命中
→ PARSE: 标题="产品需求会记录", 摘要="今天和产品团队开了需求会"
→ 确认: "确认保存笔记?标题: 产品需求会记录"
→ 用户确认
→ READ modules/amemo-save-memo/SKILL.md → curl POST /save-memo
→ code=200 → SET lastMemoId → 发送保存成功消息