| name | life-planner-quick-add |
| description | 快速添加日程任务,支持自然语言输入和交互确认。
用户用一句话描述任务,系统自动解析各字段,展示给用户确认,支持多轮修改后再写入表格。
触发场景:
- 用户要求添加任务/日程/待办
- 用户说"添加 xxx"、"记录 xxx"、"我要 xxx"、"帮我记一下 xxx"
- 用户描述一个需要做的事情
数据源:云文档/日程管理/个人日程数据
|
快速添加日程技能
固定配置
交互流程
Step 1: 接收用户输入
用户用自然语言描述任务,例如:
- "明天下午 3 点前提交论文初稿,大概需要 2 小时"
- "买牛奶"
- "下周之前完成论文第三章,属于论文投稿项目"
Step 2: 解析任务信息
根据 parsing-rules.md 解析各字段:
| 字段 | 解析逻辑 |
|---|
| 任务名称 | 提取核心动作 + 对象 |
| 类型 | Action / Project / Habit |
| 状态 | 默认"待办" |
| 今日优先级 | 默认"无" |
| Area | 关键词匹配 |
| 截止日期 | 解析时间表达 |
| 预计耗时 | 解析时长表达 |
| 所属项目 | 识别"属于 xxx 项目" |
| 描述 | 可选,补充说明 |
Step 2.5: 判断是否需要 Cron 提醒 ⏰
触发条件(全部满足):
- 任务类型 = Action
- 截止日期 已指定(非空)
- 用户未明确说"不要提醒" / "不需要提醒"
不触发的情况:
- 类型是 Habit 或 Project
- 没有截止日期
- 截止时间已经过去
- 用户明确拒绝提醒
→ 如果满足条件,进入 Step 3.5 计算提醒时间
Step 3: 时间戳计算与验证 ⚠️ 重要
截止日期字段需要毫秒时间戳。禁止估算,必须使用工具精确计算!
3.1 获取当前时间
调用 session_status 获取当前日期时间。
3.2 计算毫秒时间戳
使用 exec 调用 date 命令:
TZ='Asia/Shanghai' date -d "YYYY-MM-DD HH:MM" +%s%3N
示例:
TZ='Asia/Shanghai' date -d "2026-03-20 19:00" +%s%3N
3.3 反向验证(必须执行)
将时间戳转换回日期,验证是否正确:
TZ='Asia/Shanghai' date -d @时间戳秒数
示例:
TZ='Asia/Shanghai' date -d @1774004400
3.4 验证逻辑
预期日期时间 vs 反向验证结果
├─ 一致 → ✅ 时间戳正确,继续
└─ 不一致 → ❌ 重新计算
Step 3.5: 计算 Cron 提醒时间 ⏰
仅当 Step 2.5 判断需要提醒时执行
提醒时间规则
| 截止时间距离当前时间 | 提醒提前量 |
|---|
| > 24 小时 | 提前 30 分钟 |
| 1-24 小时 | 提前 15 分钟 |
| < 1 小时 | 提前 10 分钟 |
计算方式
- 获取当前时间戳(毫秒)
- 计算时间差 = 截止时间戳 - 当前时间戳
- 根据时间差选择提前量
- 提醒时间戳 = 截止时间戳 - 提前量(毫秒)
TZ='Asia/Shanghai' date -d "2026-03-20 19:00 - 15 minutes" +%s%3N
TZ='Asia/Shanghai' date -d @1774003500
不创建提醒的情况
- 提醒时间已过(提醒时间戳 < 当前时间戳)
- 用户明确说"不要提醒"
Step 4: 展示确认
格式化展示解析结果,截止日期必须显示具体日期时间:
无提醒时:
📝 我理解的日程信息如下:
任务名称:提交论文初稿
类型:Action
Area:科研
截止日期:明天 15:00(2026-03-21 15:00)
预计耗时:2 小时
所属项目:(未指定)
确认添加?如需修改请告诉我。
有提醒时:
📝 我理解的日程信息如下:
任务名称:建立党小组群聊
类型:Action
Area:党建
截止日期:今天 19:00(2026-03-20 19:00)
⏰ **检测到有明确截止时间,是否需要定时提醒?**
- 提醒时间:今天 18:45(截止前 15 分钟)
- 提醒内容:"⏰ 提醒:建立党小组群聊 将在 15 分钟后截止"
回复"确认"添加任务 + 提醒,或告诉我"不需要提醒"。
⚠️ 截止日期格式要求:用户表达(具体日期时间)
这样用户可以直接检查日期是否正确。
Step 5: 处理用户反馈
情况 A - 用户确认:
- 用户说:"好的" / "确认" / "没问题" / "对" / "ok"
- → 进入 Step 7: 写入表格(如有提醒,进入 Step 7.5 创建 cron)
情况 B - 用户修改:
- 用户说:"类型改成 Project" / "时间改成 4 小时" / "这个属于论文投稿项目"
- → 更新字段,回到 Step 4 再次确认
情况 C - 用户取消:
- 用户说:"算了" / "取消" / "不要了"
- → 结束流程,清除状态
情况 D - 用户拒绝提醒:
- 用户说:"不需要提醒" / "不要提醒" / "不用提醒我"
- → 标记为不创建提醒,进入 Step 7 写入表格
Step 6: 修改处理
用户可以通过自然语言修改任意字段:
| 修改指令 | 解析 |
|---|
| "类型改成 Project" | 类型 = Project |
| "时间改成 4 小时" | 预计耗时 = 240 分钟 |
| "这个属于论文投稿项目" | 所属项目 = 论文投稿 |
| "截止时间改到下周五" | 截止日期 = 重新计算 |
| "Area 改成生活" | Area = 生活 |
| "这是习惯任务" | 类型 = Habit |
修改后重新展示确认,循环直到用户满意。
Step 7: 写入表格
-
定位数据源:
- 列出云文档根目录 → 找到"日程管理"文件夹
- 列出该文件夹 → 找到"个人日程数据"表格
- 获取 app_token
-
处理项目关联:
- 如果指定了所属项目,查找是否已存在该 Project
- 不存在则先创建 Project 类型记录
-
写入记录:
- 调用
feishu_bitable_app_table_record.create
Step 7.5: 创建 Cron 提醒任务 ⏰
仅当用户确认需要提醒时执行
调用方式
使用 exec 调用 OpenClaw CLI:
openclaw cron add \
--name "任务提醒:建立党小组群聊" \
--at "2026-03-20T18:45:00+08:00" \
--session main \
--system-event "⏰ 提醒:建立党小组群聊 将在 15 分钟后截止" \
--wake now \
--delete-after-run
参数说明
| 参数 | 说明 |
|---|
--name | 任务名称 + 提醒标识 |
--at | 提醒时间(ISO 8601 格式,带时区) |
--session main | 在主会话中执行 |
--system-event | 提醒内容 |
--wake now | 立即唤醒 |
--delete-after-run | 运行后自动删除(一次性提醒) |
时间格式转换
将毫秒时间戳转换为 ISO 8601 格式:
TZ='Asia/Shanghai' date -d @1774003500 --iso-8601=seconds
错误处理
- 如果 cron 创建失败,不影响任务写入表格
- 在返回结果中告知用户提醒创建失败
Step 8: 返回结果
无提醒时:
✅ 已添加任务「提交论文初稿」
| 字段 | 值 |
|------|-----|
| 任务名称 | 提交论文初稿 |
| 类型 | Action |
| 状态 | 待办 |
| Area | 科研 |
| 截止日期 | 明天 15:00 |
🔗 查看表格:https://xxx.feishu.cn/base/xxx
有提醒时:
✅ 已添加任务「建立党小组群聊」
| 字段 | 值 |
|------|-----|
| 任务名称 | 建立党小组群聊 |
| 类型 | Action |
| 状态 | 待办 |
| Area | 党建 |
| 截止日期 | 今天 19:00 |
⏰ 已设置提醒:今天 18:45(截止前 15 分钟)
🔗 查看表格:https://xxx.feishu.cn/base/xxx
🔗 查看 cron 任务:`openclaw cron list`
时间处理示例
示例 1:今天
用户:"今天晚上 7 点之前完成"
计算:
$ TZ='Asia/Shanghai' date -d "2026-03-20 19:00" +%s%3N
→ 1774004400000
验证:
$ TZ='Asia/Shanghai' date -d @1774004400
→ 2026 年 03 月 20 日 星期五 19:00:00 CST ✅
展示:
截止日期:今天 19:00(2026-03-20 19:00)
示例 2:明天
用户:"明天下午 3 点"
计算:
$ TZ='Asia/Shanghai' date -d "2026-03-21 15:00" +%s%3N
→ 1774063200000
验证:
$ TZ='Asia/Shanghai' date -d @1774063200
→ 2026 年 03 月 21 日 星期六 15:00:00 CST ✅
展示:
截止日期:明天 15:00(2026-03-21 15:00)
示例 3:计算提醒时间
用户:"今天晚上 7 点之前完成"(当前时间 11:00)
截止时间戳:1774004400000(19:00)
当前时间戳:1773982800000(11:00)
时间差:21600000ms = 6 小时(属于 1-24 小时范围)
提前量:15 分钟 = 900000ms
提醒时间戳:1774004400000 - 900000 = 1774003500000
计算提醒时间:
$ TZ='Asia/Shanghai' date -d "2026-03-20 19:00 - 15 minutes" +%s%3N
→ 1774003500000
验证:
$ TZ='Asia/Shanghai' date -d @1774003500
→ 2026 年 03 月 20 日 星期五 18:45:00 CST ✅
转换 ISO 8601:
$ TZ='Asia/Shanghai' date -d @1774003500 --iso-8601=seconds
→ 2026-03-20T18:45:00+08:00
展示:
⏰ 提醒时间:今天 18:45(截止前 15 分钟)
字段格式参考
写入表格时的字段格式:
| 字段名 | 类型 | 格式 |
|---|
| 任务名称 | 文本 | 字符串 |
| 类型 | 单选 | 字符串 |
| 状态 | 单选 | 字符串 |
| 今日优先级 | 单选 | 字符串 |
| Area | 单选 | 字符串 |
| 截止日期 | 日期 | 毫秒时间戳(必须精确计算) |
| 预计耗时(分钟) | 数字 | 整数 |
| 实际耗时(分钟) | 数字 | 整数(留空) |
| 描述 | 文本 | 字符串 |
| 所属项目 | 关联 | 记录 ID(record_id) |
⚠️ 重要注意事项
- 禁止估算时间戳:必须使用
date 命令精确计算
- 必须反向验证:计算后必须验证时间戳是否正确
- 展示具体日期:确认时必须显示具体日期时间,让用户可检查
- 所属项目:需要先查找或创建 Project 类型记录
- 用户取消:清除状态,不写入任何数据
- 多轮修改:每次修改后都要重新确认
- Cron 提醒:
- 仅对 Action 类型 + 有截止日期的任务创建
- 必须用户确认后才创建
- 提醒时间根据截止时间动态计算
- 使用
--delete-after-run 确保一次性提醒自动清理
- 提醒创建失败不影响任务写入