name: smart-planner
description: >-
智能工作计划管理助手。支持自然语言录入未来工作计划(如"明天上午9点开会"、"下周一下午拜访客户")、
按日期/时间段查询计划、设置定时提醒(到期自动在 WorkBuddy 发送消息提醒)、
根据已有记录自动生成日报/周报/月报(如"生成本周工作汇报及下周工作计划")。
覆盖场景:明天工作、未来某日工作、当天上/下午工作计划、下周工作安排、工作报告生成等。
trigger_keywords:
- 明天工作
- 明日工作
- 今日工作计划
- 今天工作安排
- 今天工作计划
- 今天上午工作计划
- 今天上午工作安排
- 今天下午工作计划
- 今天下午工作安排
- 今天工作
- 明日工作计划
- 明天工作安排
- 后天工作
- 本周工作计划
- 本周工作安排
- 下周工作计划
- 下周工作安排
- 查看工作计划
- 我的工作计划
- 删除工作计划
- 工作计划提醒
- 上午工作计划
- 下午工作计划
- 晚上工作计划
- 明日上午
- 明日下午
- 明天上午
- 明天下午
- 明天晚上
- 周工作计划
- 周工作安排
- 下周工作
- 下周几工作
- 本周几工作
- 提醒我
- 设置提醒
- 取消提醒
- 日报
- 周报
- 月报
- 工作汇报
- 工作日报
- 工作周报
- 工作月报
- 生成本周工作汇报
- 生成下周工作计划
- 本日工作汇报
- 明日工作计划
- 周工作汇报
- 日工作汇报
- 本月工作汇报
- 下月工作计划
- 本周工作总结
- 下周工作安排
- 生成工作汇报
- 生成日报
- 生成周报
- 生成月报
agent_created: true
user_level: true
dependencies:
scripts:
- scripts/plans.py
- scripts/check_reminder.py
data:
- data/plans.json
python: C:\Users\admin.workbuddy\binaries\python\versions\3.13.12\python.exe
工作计划管理
智能工作计划管理技能。用自然语言录入、查询、管理你的工作计划,支持定时提醒。
核心能力
- 自然语言录入计划:解析"明天上午9点开会"、"下周一下午3点拜访客户"等自然语言,自动提取日期、时间段和内容
- 按时间查询计划:支持查询今天/明天/本周/下周/指定日期的工作安排
- 定时自动提醒:为带具体时间的计划设置 automation,到期自动在 WorkBuddy 发消息提醒
- 计划管理:支持查看、删除已有计划
环境配置
PYTHON="C:\Users\admin\.workbuddy\binaries\python\versions\3.13.12\python.exe"
SKILL_DIR="$HOME/.workbuddy/skills/工作计划管理"
PLANS_SCRIPT="$SKILL_DIR/scripts/plans.py"
流程一:用户录入工作计划
触发条件
用户消息中包含未来时间的计划,如:
- "明天上午9点开会讨论Q3预算"
- "下周一下午3点拜访客户"
- "8月5日下午2点产品评审"
- "今天下午整理报销凭证"
- "后天晚上聚餐"
- "周末团建"
- "下周工作计划:完成项目报告"
AI 操作步骤
Step 1:时间解析
调用 plans.py parse 解析用户输入:
$PYTHON "$PLANS_SCRIPT" parse "明天上午9点开会讨论Q3预算"
输出示例:
{
"date": "2026-07-30",
"time_label": "上午",
"time_str": "09:00",
"content": "开会讨论Q3预算"
}
Step 2:确认内容
将解析结果展示给用户确认:
- 日期 + 星期
- 时间段 + 具体时间
- 计划内容
如果解析结果明显不对(如把下午3点识别为上午),请用户手动纠正后重新解析。
如果用户输入中没有具体计划内容(如只说"明天工作"),则询问用户明天的具体工作计划是什么,待用户补充后再录入。
Step 3:保存计划
$PYTHON "$PLANS_SCRIPT" save "<date>" "<time_label>" "<time_str>" "<content>"
保存成功后会返回包含 id 的 JSON,记录该 ID 用于后续操作。
Step 4:询问是否设置提醒
仅在计划包含具体时间(time_str 非空)且日期在未来时,询问用户:
> "需要我在 X月X日 XX:XX 提醒你吗?"
- 用户确认 → 执行 Step 5 创建 automation
- 用户拒绝 → 不创建提醒,流程结束
Step 5:创建 automation 定时提醒
使用 automation_update 工具创建一次性定时任务:
mode:"create"scheduleType:"once"scheduledAt: 计划日期 + 时间的 ISO 8601 格式。例如 "2026-07-30T09:00"name:"工作计划提醒: {content摘要}"(摘要取前10个字)prompt: 提醒的具体内容,格式:
你是一个工作计划提醒助手。现在时间是提醒触发时间。 请读取 ~/.workbuddy/skills/工作计划管理/data/plans.json 文件, 找到今天(YYYY-MM-DD)的工作计划,以友好、清晰的方式展示给用户。 只需要展示今天的工作计划,不要提及其他操作。cwds: 当前工作区路径(可选,设为F:\shd\SKJN\2026-07-29-13-42-11)
创建 automation 后,在 plans.py 中更新该计划的 automation_id:目前 plans.py 的 save_plan 已支持 automation_id 参数,但需要在创建 automation 后更新。简化做法:先用 save_plan 保存不带 automation_id 的计划,获取 plan_id;然后创建 automation;再手动更新 plans.json 中对应计划的 automation_id 和 reminder_set 字段。
简便做法:创建 automation 后,记录 automation_id,然后在回复中告诉用户"提醒已设置",不需要回写 plans.json(因为 plans.py 的 save_plan 已支持直接传 automation_id,可以分两步:先创建 automation,再 save_plan 时传入 automation_id)。
更简便做法:Step 3 暂不保存,先创建 automation → 拿到 automation id → 再 save_plan 时传入 automation_id。
推荐做法(一次完成):
1. 先创建 automation(automation_update mode=create)
2. 从返回结果中获取 automation id
3. 调用 save_plan 时传入该 automation_id
流程二:用户查询工作计划
触发条件
用户输入以下关键词之一:
- "今日工作计划" / "今天工作安排" / "今天工作"
- "今天上午工作计划" / "今天上午工作安排"
- "今天下午工作计划" / "今天下午工作安排"
- "今天X点工作计划"
- "本周工作计划" / "本周工作安排"
- "本周X工作计划" / "本周X工作安排"
- "下周工作" / "下周工作计划" / "下周工作安排"
- "明天工作" / "明日工作" / "明天工作安排"
- "查看工作计划" / "我的工作计划"
AI 操作步骤
Step 1:判断查询类型
根据用户输入的关键词判断查询范围:
| 用户输入 | 查询命令 |
|---|---|
| 今天/今日 工作计划/安排 | $PYTHON "$PLANS_SCRIPT" today |
| 今天上午 工作计划/安排 | $PYTHON "$PLANS_SCRIPT" today 上午 |
| 今天下午 工作计划/安排 | $PYTHON "$PLANS_SCRIPT" today 下午 |
| 今天晚上 工作计划/安排 | $PYTHON "$PLANS_SCRIPT" today 晚上 |
| 明天/明日 工作/计划/安排 | $PYTHON "$PLANS_SCRIPT" tomorrow |
| 本周 工作/计划/安排 | $PYTHON "$PLANS_SCRIPT" week |
| 本周X 工作/计划/安排 | 先计算对应日期,再用 $PYTHON "$PLANS_SCRIPT" query <date> <date> |
| 下周 工作/计划/安排 | 先计算下周日期范围,再用 $PYTHON "$PLANS_SCRIPT" query <start> <end> |
| 查看/全部 工作计划 | $PYTHON "$PLANS_SCRIPT" list |
Step 2:执行查询并展示
直接运行命令,将输出展示给用户。脚本已格式化好输出,直接呈现即可。
如果查询结果为空,提醒用户暂无该时段的工作计划。
流程三:用户删除/修改工作计划
删除
用户输入:
- "删除XX工作计划"
- "删除[ID:abc123]这个计划"
- "取消明天上午的计划"
AI 操作:
1. 如果用户指定了 ID,直接执行 $PYTHON "$PLANS_SCRIPT" delete <plan_id>
2. 如果用户指定了日期+时间段,先查询确认,再执行 $PYTHON "$PLANS_SCRIPT" query 找到对应 ID 后删除
3. 如果该计划有关联的 automation,提醒用户 automation 不会自动删除(需手动在设置中管理)
修改
用户输入:
- "把[ID:abc123]改成下午3点"
- "修改明天上午的计划为..."
AI 操作:
1. 先查询原计划确认
2. 删除旧计划
3. 按新内容重新录入
流程四:仅设置/取消提醒
设置提醒(已有计划)
用户输入:
- "提醒我明天上午9点开会"
- "设置提醒:下午3点交报告"
AI 操作:
1. 如果用户未录入过该计划,先按流程一步骤录入
2. 如果已有计划(通过查询确认),创建 automation
取消提醒
用户输入:
- "取消[ID:xxx]的提醒"
- "不用提醒我了"
AI 操作:
1. 查询该计划的 automation_id
2. 调用 automation_update mode=delete 删除对应 automation
3. 更新 plans.json 中该计划的 reminder_set: false
流程五:生成工作报告
触发条件
用户输入以下关键词之一:
- "日报" / "生成日报" / "工作日报" / "本日工作汇报及明日工作计划"
- "日工作汇报" / "日工作汇报及明日工作计划"
- "周报" / "生成周报" / "工作周报" / "本周工作汇报及下周工作计划"
- "周工作汇报" / "周工作汇报及下周工作计划" / "本周工作总结"
- "月报" / "生成月报" / "工作月报" / "本月工作汇报及下月工作计划"
- "月工作汇报及下月工作计划"
- "生成本周工作汇报" / "生成下周工作计划"
- "生成工作汇报"
AI 操作步骤
Step 1:识别报告类型
根据用户输入判断报告类型:
| 用户关键词 | 报告类型 | 对应命令 |
|---|---|---|
| 日报、本日汇报、日工作汇报... | daily | $PYTHON "$PLANS_SCRIPT" report daily |
| 周报、本周汇报、周工作汇报... | weekly | $PYTHON "$PLANS_SCRIPT" report weekly |
| 月报、本月汇报、月工作汇报... | monthly | $PYTHON "$PLANS_SCRIPT" report monthly |
Step 2:询问用户确认
先查询该时间段内是否有已记录的计划。 如果对应时间段内没有任何记录,直接告知用户"暂无该时段的工作记录,无法生成报告,请先录入工作计划。"
如果有记录,向用户确认:
> "我将根据已记录的工作计划,为你生成以下报告:
> - {报告名称}({日期/周期/月份})
> - 已完成部分:X 条记录
> - 计划部分:X 条记录
>
> 是否直接按现有记录生成?"
Step 3:执行生成
用户确认后,运行对应命令生成报告:
# 日报:本日 + 明日
$PYTHON "$PLANS_SCRIPT" report daily
# 周报:本周 + 下周
$PYTHON "$PLANS_SCRIPT" report weekly
# 月报:本月 + 下月
$PYTHON "$PLANS_SCRIPT" report monthly
Step 4:展示报告
将脚本输出的报告原文展示给用户。
如果用户对报告内容不满意(如某项已完成的工作未记录在案),可提示用户先补充录入后再重新生成。
报告格式说明
日报:# 工作日报 → ## 今日工作汇报 → ## 明日工作计划
周报:# 工作周报 → ## 本周工作汇报 → ## 下周工作计划
月报:# 工作月报 → ## 本月工作汇报 → ## 下月工作计划
报告中的"已完成"部分来自该时段内已录入的计划记录,"计划"部分来自下一时段已录入的计划记录。
重要注意事项
时间解析准确性
- "今天3点" 在没有上午/下午前缀时,3点默认识别为上午。如果用户在下午说"今天3点",大概率指下午3点,需要结合当前时间判断。
- 判断规则:如果当前时间已过中午12点,用户说的"X点"通常指下午/晚上的 X 点
- 建议此时向用户确认:"你是指下午3点吗?"
日期推算
- 今天是 2026-07-29(周三),本周一是 07-27
- 下周一是 08-03
- 计算时使用 Python 的 datetime 确保准确,不要心算
Automation 管理
- 每个 automation 都有唯一 ID,创建后记录
- 同一个计划不要重复创建 automation
- 如果 automation 创建失败,告知用户但仍保存计划(无提醒功能)
- 提醒 automation 的 prompt 要自包含(因为 automation 在独立上下文中运行)
数据存储
- 所有计划存储在
~/.workbuddy/skills/工作计划管理/data/plans.json - JSON 结构稳定,不要手动修改格式
- 定期提示用户清理过期计划
privacy
- 工作计划属于用户隐私数据,不得在回复中透露给其他上下文
- 数据仅存储在本地,不上传到任何外部服务
快速参考命令
PYTHON="C:\Users\admin\.workbuddy\binaries\python\versions\3.13.12\python.exe"
PLANS="$HOME/.workbuddy/skills/工作计划管理/scripts/plans.py"
# 保存计划
$PYTHON $PLANS save "2026-07-30" "上午" "09:00" "开会讨论Q3预算"
# 查询今天
$PYTHON $PLANS today
# 查询今天上午
$PYTHON $PLANS today 上午
# 查询明天
$PYTHON $PLANS tomorrow
# 查询本周
$PYTHON $PLANS week
# 查询指定范围
$PYTHON $PLANS query "2026-08-03" "2026-08-09"
# 查询全部
$PYTHON $PLANS list
# 生成日报(本日+明日)
$PYTHON $PLANS report daily
# 生成周报(本周+下周)
$PYTHON $PLANS report weekly
# 生成月报(本月+下月)
$PYTHON $PLANS report monthly
# 删除计划
$PYTHON $PLANS delete <plan_id>
# 解析时间
$PYTHON $PLANS parse "明天上午9点开会"
支付宝付费改造契约(PAYSKILL)
本技能为付费技能(PAYSKILL)。调用遵循支付宝 AI 生意画像契约,由平台调度层执行 probe → pay → complete → ack 流程:
- probe(探测):平台调用前先探测是否已持有本技能的支付宝有效订阅 / 付费凭证。已付费则直接放行。
- 402 Payment-Needed:未付费时,脚本向标准输出返回 HTTP 状态
402与Payment-Needed标记,提示用户通过支付宝完成付费(pay),平台据此唤起付费页。 - complete(扣费确认):用户在支付宝完成扣费后,平台下发
Payment-Proof(付费凭证)。 - ack(验签放行):平台携带
Payment-Proof重试本次调用;scripts/payment_gate.py验签该凭证,确认有效后放行主流程。
订阅持久化与幂等:
- 付费状态缓存在本地
.pay_cache/state.json,避免每次调用重复付费(订阅持久化)。 - 同一
Payment-Proof在 24h 幂等窗口内仅生效一次,避免重复扣费。
现金流改造后的调用套路:
用户调用 → 平台 probe →
未付费:下发 402 Payment-Needed → 支付宝 pay → complete → 下发 Payment-Proof
已付费/携带 Proof:脚本 ack 验签 → 放行主流程
> 本契约由 SkillHUB 平台调度层解析,脚本本地仅处理 402 / 验签 / 持久化 三环节;付费本体交给支付宝。
支付宝 AI 按量付费(Machine Pay / A2M)改造说明
本 Skill 已按支付宝官方 A2M 协议改造为 Pay Skill,付费闸口位于 scripts/payment_gate.py,统一调用云端计费服务 https://pay.pembroli.cn/api/resource。
付费流程
- 未付费调用时,服务端返回 HTTP 402 +
Payment-Needed头,携带金额、商户、订单号及 RSA2 签名。 - 买家侧
payment_gate.py收到 402 后引导用户完成支付,平台回传Payment-Proof。 - 客户端携带
Payment-Proof重试资源端点。
验付调用
服务端收到 Payment-Proof 后,调用支付宝验付接口(alipay.aipay.agent.payment.verify)核验凭证有效性(trade_no、out_trade_no、active 状态),验证失败返回 400,验证通过才进入资源发放。
履约确认
资源发放成功后,服务端异步调用履约确认接口(alipay.aipay.agent.fulfillment.confirm,trade_no)回执,标记本笔订单已履约;并按 out_trade_no 做幂等,重复请求直接返回已缓存结果,杜绝重复收费。
幂等与缓存
买家侧按 slug 本地缓存 Payment-Proof(24h TTL),有效期内免重复支付;服务端按订单号幂等,保证同一笔订单只履约一次。