From e21152e1a93ddb83a9e329e71552cbc6491d08f7 Mon Sep 17 00:00:00 2001 From: openclaw-314 Date: Thu, 17 Sep 2026 22:13:37 +0800 Subject: [PATCH] auto: sync OpenClaw config 2026-09-17 22:13 --- .../birthday-reminder/SKILL.md | 31 ++++-- .../cross-channel-send/SKILL.md | 10 +- .../scheduled-reminders/SKILL.md | 1 + .../agent/workshop-skills/wellness/SKILL.md | 15 +-- .../PROPOSAL.md | 101 ++++++++++++++++++ .../PROPOSAL.md | 92 ++++++++++++++++ .../PROPOSAL.md | 97 +++++++++++++++++ workspace-fitness/memory/2026-09-17.md | 32 ++++++ workspace/MEMORY.md | 12 ++- 9 files changed, 368 insertions(+), 23 deletions(-) create mode 100644 skill-workshop/proposals/birthday-reminder-20260917-9abd740379/generations/b939222e-564f-4771-9eff-dcdf2b196020/PROPOSAL.md create mode 100644 skill-workshop/proposals/birthday-reminder-20260917-cb87c139fc/generations/4517f29f-c2e9-40ad-b3d0-3892fc657cb3/PROPOSAL.md create mode 100644 skill-workshop/proposals/birthday-reminder-20260917-e2163fdc92/generations/b15db1d4-66ab-4bd2-9a96-72acb732e0cb/PROPOSAL.md create mode 100644 workspace-fitness/memory/2026-09-17.md diff --git a/agents/main/agent/workshop-skills/birthday-reminder/SKILL.md b/agents/main/agent/workshop-skills/birthday-reminder/SKILL.md index 416011a..a3ae757 100644 --- a/agents/main/agent/workshop-skills/birthday-reminder/SKILL.md +++ b/agents/main/agent/workshop-skills/birthday-reminder/SKILL.md @@ -1,11 +1,11 @@ --- name: "birthday-reminder" -description: "管理家人/朋友生日提醒。农历或阳历生日,每年换算公历,生日前7天、前3天、当天通过钉钉提醒杨轩。" +description: "管理家人/朋友生日提醒。农历或阳历生日,每年换算公历,生日前7天、前3天、当天通过钉钉+飞书双通道提醒杨轩。" --- # 生日提醒 skill -统一管理杨轩的家人/朋友生日提醒。支持农历或阳历生日,每年换算公历日期,在生日**前7天、前3天、当天**通过钉钉当前对话提醒杨轩。 +统一管理杨轩的家人/朋友生日提醒。支持农历或阳历生日,每年换算公历日期,在生日**前7天、前3天、当天**通过**钉钉 + 飞书两个通道**提醒杨轩。 ## 触发场景 @@ -49,14 +49,17 @@ for year in range(2026, 2031): ## 创建 cron 任务(核心流程) -每个生日创建**3个一次性 cron 任务**(前7天/前3天/当天),使用 `isolated` session + announce 投递到钉钉。 +每个生日建**3 对一次性 cron 任务**(前7天/前3天/当天),每对含**钉钉 + 飞书各一条**。单条 cron 只能投一个渠道,双通道靠「孪生任务」实现。 -关键投递参数(**必须显式设置,否则不会推送到钉钉**): -- `--session isolated` -- `--announce --channel dingtalk-connector --to 0464031658857345` -- `--wake now --delete-after-run` +投递目标(**必须显式设置,否则不会推送**): -命令模板: +- 钉钉:`--announce --channel dingtalk-connector --to 0464031658857345` +- 飞书:`--announce --channel feishu --to oc_8eecfa0e1cc185c1cb19b4f3950cbc52` + (**必须用私聊 chat_id**;用用户 open_id 会被拒:`Sending messages to users is temporarily unavailable`) +- 两条都加:`--session isolated --agent main --wake now --delete-after-run` +- 飞书任务 `--name` 加后缀「(飞书)」,文案与钉钉版完全一致 + +命令模板(钉钉版;飞书版把 `--channel`/`--to` 换成上面飞书值,`--name` 加「(飞书)」): ```bash cd /home/yangxuan/.openclaw && openclaw cron create "" \ @@ -67,6 +70,8 @@ cd /home/yangxuan/.openclaw && openclaw cron create "" \ --to "0464031658857345" --wake now --delete-after-run ``` +一次建多条时写 python/shell 脚本循环调用(2026-09-17 用脚本一次建了 20 条飞书孪生任务),比逐条手敲快得多。 + 注意:`--at` 时间不带时区按 UTC 处理。北京时间 = UTC+8。 ## 步骤 @@ -74,13 +79,17 @@ cd /home/yangxuan/.openclaw && openclaw cron create "" \ 1. 记录/更新生日信息到 MEMORY.md 的"🎂 生日提醒"区域 2. 若农历生日,用 lunar_python 换算当年及下一年的公历日期;若阳历则固定 3. 计算三个提醒日(前7天/前3天/当天) -4. 为每年分别创建3个一次性 cron 任务(isolated + announce 钉钉),**必须带 `--agent main`**(多 agent 环境下无 owner 任务会让调度器卡死,阻塞所有提醒);投递只交给 delivery(`--announce --channel dingtalk-connector`),**禁止在 `--message`/command 里手动调 `openclaw message send`**(CLI 不认识 dingtalk-connector,会失败) -5. 验证:`openclaw cron get ` 确认任务 delivery 为 dingtalk-connector 且 agentId=main;"message send" 在整库应无残留 +4. 为每年分别创建 3 对(共 6 条)一次性 cron 任务:**钉钉 + 飞书各一条**,isolated session,**必须带 `--agent main`**(多 agent 环境下无 owner 任务会让调度器卡死,阻塞所有提醒);投递只交给 delivery,**禁止在 `--message`/command 里手动调 `openclaw message send`**(CLI 不认识 dingtalk-connector,会失败) +5. 验证:用 `openclaw cron list` 过滤「生日」,确认每个提醒日都有**钉钉 + 飞书**两条、effectiveAgentId=main、delivery.to 正确;"message send" 在整库应无残留 6. 更新 MEMORY.md 记录已完成设置的年份 ## 验证 -创建后必须确认任务 delivery 已配置为 `dingtalk-connector:0464031658857345`,否则提醒不会推送到钉钉(main session 的 system-event 默认不投递)。 +创建后必须确认 delivery 已按渠道正确配置,否则提醒不会推送: +- 钉钉任务 → `dingtalk-connector:0464031658857345` +- 飞书任务 → `feishu:oc_8eecfa0e1cc185c1cb19b4f3950cbc52`(chat_id,非 open_id) + +(main session 的 system-event 默认不投递,必须显式走 announce。) ## 注意事项 diff --git a/agents/main/agent/workshop-skills/cross-channel-send/SKILL.md b/agents/main/agent/workshop-skills/cross-channel-send/SKILL.md index 3a7526a..68a5a51 100644 --- a/agents/main/agent/workshop-skills/cross-channel-send/SKILL.md +++ b/agents/main/agent/workshop-skills/cross-channel-send/SKILL.md @@ -7,7 +7,7 @@ description: "消息发不出去/跨频道发送:Cross-context messaging denie 用于「这条消息发不出去」「改投钉钉/飞书」「飞书私聊推不动」这类场景:把消息实际送到**当前会话未绑定**的频道,并拿到可核实的送达证据。与定时提醒无关(提醒的路由写在 cron `delivery` 上,见 `scheduled-reminders`)。 -## 事实基础(本机 2026-09-16 实测,OpenClaw 2026.8.1) +## 事实基础(本机实测:2026-09-16 OpenClaw 2026.8.1;文件/附件权限 2026-09-17 OpenClaw 2026.9.4) - `message(action=send)` **受会话绑定频道限制**:主会话绑 feishu 时,指定 `channel="dingtalk-connector"` 直接被拒: `Cross-context messaging denied: action=send target provider "dingtalk-connector" while bound to "feishu"`。 @@ -18,6 +18,12 @@ description: "消息发不出去/跨频道发送:Cross-context messaging denie # → ✅ Sent via DingTalk. Message ID: card_... ``` - 飞书「机器人主动向用户发私聊」当前不可用,报 `Feishu send failed: Sending messages to users is temporarily unavailable.`:**群 / chat_id 可达、open_id 私聊不可达**,可复现;此时按第 3 步改投钉钉。 +- 飞书**发文本**与**发文件/附件**是两条不同权限: + - 带 `--media <路径>`(.md/.docx/.pdf 等)时,若应用缺 `im:resource` 权限,上传阶段即失败: + `Feishu file upload failed: ... feishu_code:99991672 ... Access denied. One of the following scopes is required: [im:resource:upload, im:resource]` + - 这是**应用权限缺失,不是投递内容问题**:换格式、换路径、重试都无效,必须由杨轩在开放平台给应用开通 `im:resource`。 + - 诊断用 `feishu_app_scopes` 看 `im:resource` 是否在 granted;开通后再发即成功(2026-09-17 实测 .md/.docx/.pdf 均以 `kind=media` 送达)。 + - 缺该权限时文本仍可发:先发文本并告知用户去开通权限,不要反复重试文件。 - 该飞书故障**换 CLI 也一样报错**(`openclaw message send --channel feishu ...` 同样失败)→ 属飞书侧限制,不是 CLI 或工具层问题。 ## 步骤 @@ -25,11 +31,13 @@ description: "消息发不出去/跨频道发送:Cross-context messaging denie 1. 先用 `message(action=send)` 发当前频道。读错误分类: - `Cross-context messaging denied` → 走第 2 步(跨频道)。 - `Sending messages to users is temporarily unavailable` → 走第 3 步(换通道)。 + - `im:resource` / `99991672`(带 `--media` 时)→ 权限缺失,走第 6 步(开通权限,不要重试文件)。 2. 跨频道补发:`openclaw message send --channel <频道> --target <目标id> --message "..."`。 目标 id 用该频道已知可达的会话:钉钉 `0464031658857345`;飞书 DM chat_id 见 `scheduled-reminders` 的「投递通道」。发送后回读输出确认 `✅ Sent via ...` + Message ID。 3. 原频道本身不可达时(如飞书主动私聊),把结果改投用户实际能收到的通道(钉钉),并在正文里说明「原频道故障 + 已改投」,让用户知道换通道的原因。 4. 核对送达:只有 CLI 输出 `✅ Sent via ...` 或 `message` 工具返回成功才算发出;任何 `Feishu send failed` / `denied` 都不算,不要在回复里声称已送达。 5. 原频道恢复或用户要求切回时,改回原频道,并撤掉临时的替代通道推送,避免同一条内容双通道重复打扰。 +6. **发文件被权限拦住时**:`feishu_app_scopes` 确认缺的权限,把开放平台的申请链接给杨轩开通(链接可从报错原文里取,形如 `https://open.feishu.cn/app//auth?q=im:resource:upload,im:resource`);开通后直接重发即可,无需改投其他通道。 ## 注意 diff --git a/agents/main/agent/workshop-skills/scheduled-reminders/SKILL.md b/agents/main/agent/workshop-skills/scheduled-reminders/SKILL.md index a2d48f7..56d6076 100644 --- a/agents/main/agent/workshop-skills/scheduled-reminders/SKILL.md +++ b/agents/main/agent/workshop-skills/scheduled-reminders/SKILL.md @@ -33,6 +33,7 @@ description: "创建/管理定时提醒(每周/每天/睡前等周期或一次 - **通了没有要实测,不要推断**:可临时建一条一次性测试任务,用 `automations run ` 立即跑一次,看 `state.lastDelivered` / `lastDeliveryError`,验证完把测试任务删掉。 - **测试只发一次**:验证投递时按上面的 run 方式做,不要额外往群或私聊手发多条诊断消息;确需手发时正文标注「测试/请忽略」。 - **cron 的 delivery 与手动发消息是两条路**:本 skill 的投递只写在 delivery 参数上;「消息发不出去 / 要跨频道手动投递」另见 `cross-channel-send`。 +- **要同一条推两个通道时用「孪生任务」**:**单条 cron 只能投一个渠道**(`delivery.channel` 只有一个值)。杨轩要「钉钉和飞书一起提醒」时,同一天建两条任务(各带一个渠道、文案完全一致),飞书那条在 `--name` 加后缀「(飞书)」以便分辨。典型应用:生日提醒(见 `birthday-reminder`,已按 3 对×每人落地)。不要试图用一条任务投多个渠道,也不要在 payload 里叠 `message send` 来凑第二个通道。 ## 创建一条周期提醒 diff --git a/agents/main/agent/workshop-skills/wellness/SKILL.md b/agents/main/agent/workshop-skills/wellness/SKILL.md index fccaf88..9dc6969 100644 --- a/agents/main/agent/workshop-skills/wellness/SKILL.md +++ b/agents/main/agent/workshop-skills/wellness/SKILL.md @@ -20,19 +20,20 @@ description: "管理按摩放松记录:查询/新增技师联系人(cc_contr - 口令存 `~/.openclaw/.env` 的 `DB_PASSWORD_放松保健`,由脚本内部读取(不进命令行、不打印) - **禁止 root、禁止 docker exec 直连、禁止跨库**;旧写法(root 账号、`db-query --database "按摩放松"`)已废弃 -### 中文乱码 / 写入失败(实测坑) +### 中文读写:无需再手写 SET NAMES(2026-09-17 起) -`db-conn.sh` 的 mysql 客户端连接字符集默认是 **latin1**(读写都受影响;这是 `db-conn.sh` 层面的行为,**其他 agent 的库同样适用**): +`db-conn.sh` 的 4 处 mysql 调用点已统一带 `--default-character-set=utf8mb4`,**中文读写直接用即可,不必再在 SQL 前加 `SET NAMES utf8mb4;`**(实测 `select @@character_set_client` 返回 utf8mb4;中文字段写入 + 回读无 1265、无乱码)。这是 `db-conn.sh` 层面的行为,**其他 agent 的库同样适用**。 -- 读:不带 `SET NAMES utf8mb4;` 时中文列全部返回 `???` -- 写:中文 INSERT/UPDATE 报 `ERROR 1265 Data truncated for column '<列名>'` - -把该语句放在同一条 `--sql` 的最前面即可正常读写: +若仍出现中文返回 `???` 或写入报 `ERROR 1265 Data truncated for column '<列名>'`: ```bash -~/.openclaw/scripts/db-conn.sh wellness --sql "SET NAMES utf8mb4; SELECT contract_name,record_locale,comment FROM cc_contract_record ORDER BY record_date DESC LIMIT 5" +~/.openclaw/scripts/db-conn.sh wellness --sql "select @@character_set_client" ``` +返回不是 utf8mb4,说明脚本被改动或调用到了旧副本——报给杨轩修脚本,不要靠每条 SQL 手动兜底。 + +修复前写入的历史行可能仍是乱码(如 `早上...`),字符集修复**不会自动回填**历史数据,需单独处理。 + ## 表结构 ### cc_contract — 技师/联系人 diff --git a/skill-workshop/proposals/birthday-reminder-20260917-9abd740379/generations/b939222e-564f-4771-9eff-dcdf2b196020/PROPOSAL.md b/skill-workshop/proposals/birthday-reminder-20260917-9abd740379/generations/b939222e-564f-4771-9eff-dcdf2b196020/PROPOSAL.md new file mode 100644 index 0000000..aabe70f --- /dev/null +++ b/skill-workshop/proposals/birthday-reminder-20260917-9abd740379/generations/b939222e-564f-4771-9eff-dcdf2b196020/PROPOSAL.md @@ -0,0 +1,101 @@ +--- +name: "birthday-reminder" +description: "管理家人/朋友生日提醒。农历或阳历生日,每年换算公历,生日前7天、前3天、当天通过钉钉+飞书双通道提醒杨轩。" +status: proposal +version: "v1" +date: "2026-09-17T13:34:18.645Z" +--- + +# 生日提醒 skill + +统一管理杨轩的家人/朋友生日提醒。支持农历或阳历生日,每年换算公历日期,在生日**前7天、前3天、当天**通过钉钉当前对话提醒杨轩。 + +## 触发场景 + +- 杨轩提供新的生日信息(农历或阳历) +- 需要查询/修改/删除某个人的生日提醒 +- 需要为下一年设置生日提醒 + +## 成员生日库(记录于 MEMORY.md) + +| 人物 | 生日类型 | 出生日期 | 说明 | +|------|---------|---------|------| +| 汪礼平 | 农历 | 1968年六月二十日 | 三次提醒 | +| 杨安顺 | 农历 | 1968年八月十八日 | 三次提醒 | +| 王芳 | 农历 | 1993年十月初七日 | 三次提醒 | +| 杨锦书 | 阳历 | 2021年11月10日 | 卷儿,阳历固定 | + +## 换算规则 + +- **农历生日**:每年农历日期对应的公历日期都不同,需要用 lunar_python 逐年换算 +- **阳历生日**:日期固定,不换算(如杨锦书每年都是11月10日) + +农历换算命令(需要 lunar_python 已安装): + +```bash +python3 -c " +from lunar_python import Lunar +for year in range(2026, 2031): + lunar = Lunar.fromYmd(year, 8, 18) # 月, 日(农历) + solar = lunar.getSolar() + print(f'{year}年农历8月18日 = 公历 {solar.getYear()}-{solar.getMonth():02d}-{solar.getDay():02d}') +" +``` + +## 提醒时间点计算 + +每年按公历生日计算三个提醒日,**当天 0 点(UTC)触发**: + +- 前7天 = 生日 - 7天 +- 前3天 = 生日 - 3天 +- 当天 = 生日当天 + +## 创建 cron 任务(核心流程) + +每个生日建**3 对一次性 cron 任务**(前7天/前3天/当天),每对含**钉钉 + 飞书各一条**。单条 cron 只能投一个渠道,双通道靠「孪生任务」实现。 + +投递目标(**必须显式设置,否则不会推送**): + +- 钉钉:`--announce --channel dingtalk-connector --to 0464031658857345` +- 飞书:`--announce --channel feishu --to oc_8eecfa0e1cc185c1cb19b4f3950cbc52` + (**必须用私聊 chat_id**;用用户 open_id 会被拒:`Sending messages to users is temporarily unavailable`) +- 两条都加:`--session isolated --agent main --wake now --delete-after-run` +- 飞书任务 `--name` 加后缀「(飞书)」,文案与钉钉版完全一致 + +命令模板(钉钉版;飞书版把 `--channel`/`--to` 换成上面飞书值,`--name` 加「(飞书)」): + +```bash +cd /home/yangxuan/.openclaw && openclaw cron create "" \ + --name "<姓名>生日提前7天" \ + --message "🎂 提醒:<姓名>生日快到了!7天后
就是生日。" \ + --agent main \ + --session isolated --announce --channel dingtalk-connector \ + --to "0464031658857345" --wake now --delete-after-run +``` + +一次建多条时写 python/shell 脚本循环调用(2026-09-17 用脚本一次建了 20 条飞书孪生任务),比逐条手敲快得多。 + +注意:`--at` 时间不带时区按 UTC 处理。北京时间 = UTC+8。 + +## 步骤 + +1. 记录/更新生日信息到 MEMORY.md 的"🎂 生日提醒"区域 +2. 若农历生日,用 lunar_python 换算当年及下一年的公历日期;若阳历则固定 +3. 计算三个提醒日(前7天/前3天/当天) +4. 为每年分别创建 3 对(共 6 条)一次性 cron 任务:**钉钉 + 飞书各一条**,isolated session,**必须带 `--agent main`**(多 agent 环境下无 owner 任务会让调度器卡死,阻塞所有提醒);投递只交给 delivery,**禁止在 `--message`/command 里手动调 `openclaw message send`**(CLI 不认识 dingtalk-connector,会失败) +5. 验证:用 `openclaw cron list` 过滤「生日」,确认每个提醒日都有**钉钉 + 飞书**两条、effectiveAgentId=main、delivery.to 正确;"message send" 在整库应无残留 +6. 更新 MEMORY.md 记录已完成设置的年份 + +## 验证 + +创建后必须确认 delivery 已按渠道正确配置,否则提醒不会推送: +- 钉钉任务 → `dingtalk-connector:0464031658857345` +- 飞书任务 → `feishu:oc_8eecfa0e1cc185c1cb19b4f3950cbc52`(chat_id,非 open_id) + +(main session 的 system-event 默认不投递,必须显式走 announce。) + +## 注意事项 + +- **当年提醒时效**:若当年提醒日已过,从下一年开始设置 +- 任务为一次性,运行后自动删除;下一年需重新换算农历并新建 +- 农历生日每年代入 lunar_python 换算公历日期(lunar_python 已通过 `pip install --break-system-packages --user lunar_python` 安装) diff --git a/skill-workshop/proposals/birthday-reminder-20260917-cb87c139fc/generations/4517f29f-c2e9-40ad-b3d0-3892fc657cb3/PROPOSAL.md b/skill-workshop/proposals/birthday-reminder-20260917-cb87c139fc/generations/4517f29f-c2e9-40ad-b3d0-3892fc657cb3/PROPOSAL.md new file mode 100644 index 0000000..b122613 --- /dev/null +++ b/skill-workshop/proposals/birthday-reminder-20260917-cb87c139fc/generations/4517f29f-c2e9-40ad-b3d0-3892fc657cb3/PROPOSAL.md @@ -0,0 +1,92 @@ +--- +name: "birthday-reminder" +description: "管理家人/朋友生日提醒。农历或阳历生日,每年换算公历,生日前7天、前3天、当天通过钉钉+飞书双通道提醒杨轩。" +status: proposal +version: "v1" +date: "2026-09-17T13:33:53.101Z" +--- + +# 生日提醒 skill + +统一管理杨轩的家人/朋友生日提醒。支持农历或阳历生日,每年换算公历日期,在生日**前7天、前3天、当天**通过钉钉当前对话提醒杨轩。 + +## 触发场景 + +- 杨轩提供新的生日信息(农历或阳历) +- 需要查询/修改/删除某个人的生日提醒 +- 需要为下一年设置生日提醒 + +## 成员生日库(记录于 MEMORY.md) + +| 人物 | 生日类型 | 出生日期 | 说明 | +|------|---------|---------|------| +| 汪礼平 | 农历 | 1968年六月二十日 | 三次提醒 | +| 杨安顺 | 农历 | 1968年八月十八日 | 三次提醒 | +| 王芳 | 农历 | 1993年十月初七日 | 三次提醒 | +| 杨锦书 | 阳历 | 2021年11月10日 | 卷儿,阳历固定 | + +## 换算规则 + +- **农历生日**:每年农历日期对应的公历日期都不同,需要用 lunar_python 逐年换算 +- **阳历生日**:日期固定,不换算(如杨锦书每年都是11月10日) + +农历换算命令(需要 lunar_python 已安装): + +```bash +python3 -c " +from lunar_python import Lunar +for year in range(2026, 2031): + lunar = Lunar.fromYmd(year, 8, 18) # 月, 日(农历) + solar = lunar.getSolar() + print(f'{year}年农历8月18日 = 公历 {solar.getYear()}-{solar.getMonth():02d}-{solar.getDay():02d}') +" +``` + +## 提醒时间点计算 + +每年按公历生日计算三个提醒日,**当天 0 点(UTC)触发**: + +- 前7天 = 生日 - 7天 +- 前3天 = 生日 - 3天 +- 当天 = 生日当天 + +## 创建 cron 任务(核心流程) + +每个生日创建**3个一次性 cron 任务**(前7天/前3天/当天),使用 `isolated` session + announce 投递到钉钉。 + +关键投递参数(**必须显式设置,否则不会推送到钉钉**): +- `--session isolated` +- `--announce --channel dingtalk-connector --to 0464031658857345` +- `--wake now --delete-after-run` + +命令模板: + +```bash +cd /home/yangxuan/.openclaw && openclaw cron create "" \ + --name "<姓名>生日提前7天" \ + --message "🎂 提醒:<姓名>生日快到了!7天后
就是生日。" \ + --agent main \ + --session isolated --announce --channel dingtalk-connector \ + --to "0464031658857345" --wake now --delete-after-run +``` + +注意:`--at` 时间不带时区按 UTC 处理。北京时间 = UTC+8。 + +## 步骤 + +1. 记录/更新生日信息到 MEMORY.md 的"🎂 生日提醒"区域 +2. 若农历生日,用 lunar_python 换算当年及下一年的公历日期;若阳历则固定 +3. 计算三个提醒日(前7天/前3天/当天) +4. 为每年分别创建3个一次性 cron 任务(isolated + announce 钉钉),**必须带 `--agent main`**(多 agent 环境下无 owner 任务会让调度器卡死,阻塞所有提醒);投递只交给 delivery(`--announce --channel dingtalk-connector`),**禁止在 `--message`/command 里手动调 `openclaw message send`**(CLI 不认识 dingtalk-connector,会失败) +5. 验证:`openclaw cron get ` 确认任务 delivery 为 dingtalk-connector 且 agentId=main;"message send" 在整库应无残留 +6. 更新 MEMORY.md 记录已完成设置的年份 + +## 验证 + +创建后必须确认任务 delivery 已配置为 `dingtalk-connector:0464031658857345`,否则提醒不会推送到钉钉(main session 的 system-event 默认不投递)。 + +## 注意事项 + +- **当年提醒时效**:若当年提醒日已过,从下一年开始设置 +- 任务为一次性,运行后自动删除;下一年需重新换算农历并新建 +- 农历生日每年代入 lunar_python 换算公历日期(lunar_python 已通过 `pip install --break-system-packages --user lunar_python` 安装) diff --git a/skill-workshop/proposals/birthday-reminder-20260917-e2163fdc92/generations/b15db1d4-66ab-4bd2-9a96-72acb732e0cb/PROPOSAL.md b/skill-workshop/proposals/birthday-reminder-20260917-e2163fdc92/generations/b15db1d4-66ab-4bd2-9a96-72acb732e0cb/PROPOSAL.md new file mode 100644 index 0000000..eb01dc3 --- /dev/null +++ b/skill-workshop/proposals/birthday-reminder-20260917-e2163fdc92/generations/b15db1d4-66ab-4bd2-9a96-72acb732e0cb/PROPOSAL.md @@ -0,0 +1,97 @@ +--- +name: "birthday-reminder" +description: "管理家人/朋友生日提醒。农历或阳历生日,每年换算公历,生日前7天、前3天、当天通过钉钉+飞书双通道提醒杨轩。" +status: proposal +version: "v1" +date: "2026-09-17T13:34:06.878Z" +--- + +# 生日提醒 skill + +统一管理杨轩的家人/朋友生日提醒。支持农历或阳历生日,每年换算公历日期,在生日**前7天、前3天、当天**通过钉钉当前对话提醒杨轩。 + +## 触发场景 + +- 杨轩提供新的生日信息(农历或阳历) +- 需要查询/修改/删除某个人的生日提醒 +- 需要为下一年设置生日提醒 + +## 成员生日库(记录于 MEMORY.md) + +| 人物 | 生日类型 | 出生日期 | 说明 | +|------|---------|---------|------| +| 汪礼平 | 农历 | 1968年六月二十日 | 三次提醒 | +| 杨安顺 | 农历 | 1968年八月十八日 | 三次提醒 | +| 王芳 | 农历 | 1993年十月初七日 | 三次提醒 | +| 杨锦书 | 阳历 | 2021年11月10日 | 卷儿,阳历固定 | + +## 换算规则 + +- **农历生日**:每年农历日期对应的公历日期都不同,需要用 lunar_python 逐年换算 +- **阳历生日**:日期固定,不换算(如杨锦书每年都是11月10日) + +农历换算命令(需要 lunar_python 已安装): + +```bash +python3 -c " +from lunar_python import Lunar +for year in range(2026, 2031): + lunar = Lunar.fromYmd(year, 8, 18) # 月, 日(农历) + solar = lunar.getSolar() + print(f'{year}年农历8月18日 = 公历 {solar.getYear()}-{solar.getMonth():02d}-{solar.getDay():02d}') +" +``` + +## 提醒时间点计算 + +每年按公历生日计算三个提醒日,**当天 0 点(UTC)触发**: + +- 前7天 = 生日 - 7天 +- 前3天 = 生日 - 3天 +- 当天 = 生日当天 + +## 创建 cron 任务(核心流程) + +每个生日建**3 对一次性 cron 任务**(前7天/前3天/当天),每对含**钉钉 + 飞书各一条**。单条 cron 只能投一个渠道,双通道靠「孪生任务」实现。 + +投递目标(**必须显式设置,否则不会推送**): + +- 钉钉:`--announce --channel dingtalk-connector --to 0464031658857345` +- 飞书:`--announce --channel feishu --to oc_8eecfa0e1cc185c1cb19b4f3950cbc52` + (**必须用私聊 chat_id**;用用户 open_id 会被拒:`Sending messages to users is temporarily unavailable`) +- 两条都加:`--session isolated --agent main --wake now --delete-after-run` +- 飞书任务 `--name` 加后缀「(飞书)」,文案与钉钉版完全一致 + +命令模板(钉钉版;飞书版把 `--channel`/`--to` 换成上面飞书值,`--name` 加「(飞书)」): + +```bash +cd /home/yangxuan/.openclaw && openclaw cron create "" \ + --name "<姓名>生日提前7天" \ + --message "🎂 提醒:<姓名>生日快到了!7天后
就是生日。" \ + --agent main \ + --session isolated --announce --channel dingtalk-connector \ + --to "0464031658857345" --wake now --delete-after-run +``` + +一次建多条时写 python/shell 脚本循环调用(2026-09-17 用脚本一次建了 20 条飞书孪生任务),比逐条手敲快得多。 + +注意:`--at` 时间不带时区按 UTC 处理。北京时间 = UTC+8。 + +## 步骤 + +1. 记录/更新生日信息到 MEMORY.md 的"🎂 生日提醒"区域 +2. 若农历生日,用 lunar_python 换算当年及下一年的公历日期;若阳历则固定 +3. 计算三个提醒日(前7天/前3天/当天) +4. 为每年分别创建3个一次性 cron 任务(isolated + announce 钉钉),**必须带 `--agent main`**(多 agent 环境下无 owner 任务会让调度器卡死,阻塞所有提醒);投递只交给 delivery(`--announce --channel dingtalk-connector`),**禁止在 `--message`/command 里手动调 `openclaw message send`**(CLI 不认识 dingtalk-connector,会失败) +5. 验证:`openclaw cron get ` 确认任务 delivery 为 dingtalk-connector 且 agentId=main;"message send" 在整库应无残留 +6. 更新 MEMORY.md 记录已完成设置的年份 + +## 验证 + +创建后必须确认任务 delivery 已配置为 `dingtalk-connector:0464031658857345`,否则提醒不会推送到钉钉(main session 的 system-event 默认不投递)。 + +## 注意事项 + +- **当年提醒时效**:若当年提醒日已过,从下一年开始设置 +- 任务为一次性,运行后自动删除;下一年需重新换算农历并新建 +- 农历生日每年代入 lunar_python 换算公历日期(lunar_python 已通过 `pip install --break-system-packages --user lunar_python` 安装) diff --git a/workspace-fitness/memory/2026-09-17.md b/workspace-fitness/memory/2026-09-17.md new file mode 100644 index 0000000..86b9bed --- /dev/null +++ b/workspace-fitness/memory/2026-09-17.md @@ -0,0 +1,32 @@ +# 2026-09-17 记忆 + +## 护肤咨询:黑头严重,是否继续深度清洁/去黑头 + +**杨轩问**:黑头还是很严重,需要继续深度清洁吗?去黑头。 + +**背景(近期方案)** +- 日常:旁氏氨基酸洁面(温水、30秒内、按压吸干);白天清水洗脸 + 百雀羚B5修护乳 +- 用酸:海洋主义15%壬二酸,周一/周三晚局部薄涂鼻子+闭口(一周2次,最多3次) +- 保湿日:百雀羚B5修护乳 +- 周五/周六:休息日,只温水洗脸 +- 鼻子偶尔泛红刺痛(如有则停酸只保湿) +- 9/16(1天前)刚在美容院「奢思雅」做细胞夹全脸深层清洁 + +**给出的结论(教练口径)** +- ❌ 不要继续深度清洁:距上次仅 1 天,屏障脆弱期(24-72h)未过 +- ❌ 不用鼻贴/撕拉膜、不加强刷酸 +- ✅ 黑头是慢性问题,靠壬二酸长期管理(8-12 周),不是靠一次清干净 +- 原理:黑头 = 皮脂+角质在毛孔口氧化变黑;挤掉的是「结果」,不是「原因」(皮脂分泌+角质代谢) +- 恶性循环提示:频繁物理清洁 → 毛孔周围发炎/松弛 → 视觉上更明显 + +**频率建议** +| 项目 | 频率 | +|---|---| +| 细胞夹深层清洁 | 距上次 ≥4-6 周,且仅必要时 | +| 清洁面膜(泥膜) | ≤1次/周,只涂鼻翼T区 | +| 鼻贴/撕拉膜 | 建议不用 | +| 壬二酸15% | 维持每周2次(周一周三),不加强 | +| 保湿 | 每天B5修护乳 | +| 防晒 | 白天必须 | + +**红线**:泛红刺痛 → 停酸,只保湿修护;若黑头伴红肿痘/毛孔发炎,或规范护理 8-12 周无改善 → 建议皮肤科就诊(医生可出处方级方案,比美容院挤压更安全) diff --git a/workspace/MEMORY.md b/workspace/MEMORY.md index 36b3d2d..d794a5d 100644 --- a/workspace/MEMORY.md +++ b/workspace/MEMORY.md @@ -79,10 +79,13 @@ - **工作日 20:00** — 提醒杨轩和杨锦书视频,督促杨锦书踢水 ## 🎂 家庭成员生日提醒(每年,统一规则) -- **投递红线**:所有钉钉推送/提醒统一使用 delivery 机制(`--announce --channel dingtalk-connector --to 0464031658857345`);**禁止在任务命令里手动调 `openclaw message send`**(CLI 不认识 dingtalk-connector,曾致 dinner-21 单独坏掉)。完整规范见 `workspace/TOOLS.md`「📢 钉钉推送统一规范」;新建 cron 任务一律 `--agent main`。 -- **提醒规则**:每年在公历生日**前7天**、**前3天**、**当天**各提醒一次(共三次),通过钉钉当前对话发给杨轩 -- **换算**:农历生日每年用 lunar_python 换算为公历日期(阳历生日固定);再为每年设三个一次性 cron(isolated + announce 钉钉),运行后自动删除 -- **投递参数(必须)**:`--session isolated --announce --channel dingtalk-connector --to 0464031658857345 --wake now --delete-after-run` +- **投递双通道(2026-09-17 起)**:每条生日提醒同时建 **钉钉 + 飞书** 两份(单条 cron 只能投一个渠道,故用「孪生任务」)。任务名后缀「(飞书)」者为飞书投递。 + - 钉钉:`--announce --channel dingtalk-connector --to 0464031658857345` + - 飞书:`--announce --channel feishu --to oc_8eecfa0e1cc185c1cb19b4f3950cbc52`(**必须用 chat_id,open_id 直推不可用**) +- **投递红线**:所有钉钉推送/提醒统一使用 delivery 机制;**禁止在任务命令里手动调 `openclaw message send`**(CLI 不认识 dingtalk-connector,曾致 dinner-21 单独坏掉)。完整规范见 `workspace/TOOLS.md`「📢 钉钉推送统一规范」;新建 cron 任务一律 `--agent main`。 +- **提醒规则**:每年在公历生日**前7天**、**前3天**、**当天**各提醒一次(共三次) +- **换算**:农历生日每年用 lunar_python 换算为公历日期(阳历生日固定);再为每年设三个一次性 cron(isolated + announce),运行后自动删除 +- **投递参数(必须)**:`--session isolated --announce --channel --to <目标> --wake now --delete-after-run` ### 成员生日库(定义见 birthday-reminder skill) | 人物 | 生日类型 | 出生日期 | 关系 | @@ -93,6 +96,7 @@ | 杨锦书 | 阳历 | 2021年11月10日 | 卷儿,阳历固定 | ### 已设置的提醒年份 +> 2026 与 2027 年的全部生日提醒**均已同时建钉钉+飞书两份**(共 40 条:钉钉 20 + 飞书 20)。 - **2026年**:杨安顺=9/28(前7天9/21、前3天9/25、当天9/28)✅;杨锦书=11/10(11/3、11/7、11/10)✅;王芳=11/15(11/8、11/12、11/15)✅ - **2027年**:汪礼平=7/23(前7天7/16、前3天7/20、当天7/23)✅;杨安顺=9/18(9/11、9/15、9/18)✅;杨锦书=11/10(11/3、11/7、11/10)✅;王芳=11/4(10/28、11/1、11/4)✅ - 汪礼平2026年=8/2(当年已过);杨安顺2026年=9/28、王芳2026年=11/15、杨锦书2026年=11/10 均已设