四季目标管理系统:设定年目标/月目标 → 自动生成每日任务 → 完成记录 + 月度汇总。
本 skill 支持定时任务自动推送,首次使用前请完成以下配置:
在 Claw 的定时任务管理界面中,添加以下三个定时任务:
| 任务名称 | Cron 表达式 | 触发消息 |
|---------|-----------|---------|
| 每日目标提醒 | 0 8 * | 调用Skill:personal-goals-pro,触发:查看今日任务 |
| 明日任务生成 | 0 21 * | 调用Skill:personal-goals-pro,触发:生成明天任务 |
| 月度目标汇总 | 0 21 L | 调用Skill:personal-goals-pro,触发:查看本月汇总 |
> 💡 Cron 表达式说明:
> - 0 8 *:每天 08:00 触发
> - 0 21 *:每天 21:00 触发
> - 0 21 L :每月最后一天 21:00 触发(L 表示月末)
你可以随时通过发送关键字(如「查看今日任务」「查看目标」)主动查询任务和目标。如需定时自动推送,请在 Claw 环境中配置 IM 平台(微信、钉钉、飞书等)的推送渠道,即可实现每日提醒和月度汇总的自动推送。
配置完成后即可开始使用!
首次使用前,读取 skill 目录下的 config.json 获取数据存储路径:
{
"dataDir": "./data",
"maxBackups": 5
}
dataDir:数据文件的存储目录,默认为 ./data(相对于 skill 目录,即 config.json 所在目录)。用户可修改为任意绝对路径或相对路径
maxBackups:最大备份数量,默认 5。超过此数量时自动删除最旧的备份
config.json 获取 dataDir,若为相对路径则基于 config.json 所在目录解析为绝对路径后再使用
按月拆分文件,每月一个文件包含该月的所有数据(月度目标、日任务、完成记录),避免单文件无限膨胀,同时文件数量可控(一年仅12个):
{dataDir}/
├── goals_yearly.json # 年度目标(唯一单文件,按年份分 key)
└── monthly/ # 每月一个文件
├── 2026-05.json
├── 2026-06.json
└── ...
{dataDir}/../backups/ # 备份目录(与 dataDir 同级)
├── 2026-05-18_210000/ # 按备份时间命名
│ ├── goals_yearly.json
│ └── monthly/
│ └── ...
├── 2026-05-17_210000/
└── ... # 最多保留 maxBackups 份
💡 文件路径拼接规则:
{dataDir}/goals_yearly.json(单文件)
{dataDir}/monthly/{YYYY-MM}.json(每月一个文件)
{
"2026": [
{
"id": "uuid",
"content": "目标描述",
"category": "health|learning|work|life|other",
"createdAt": "2026-01-15",
"active": true,
"completed": false,
"progress": 0,
"notes": [
{
"id": "uuid",
"date": "2026-03-15",
"content": "阶段性进度或附属信息"
}
]
}
],
"2027": []
}
{
"goals": [
{
"id": "uuid",
"content": "月度目标描述",
"category": "health|learning|work|life|other",
"createdAt": "2026-05-01",
"active": true,
"completed": false,
"progress": 0,
"notes": [
{
"id": "uuid",
"date": "2026-05-10",
"content": "备注内容"
}
]
}
],
"days": {
"2026-05-01": [
{
"id": "uuid",
"content": "任务描述",
"source": "manual|yearly|monthly",
"sourceGoalId": "uuid(可选,关联来源目标)",
"sourcePeriod": "2026-05(对应月度)或 2026(对应年度)",
"completed": false,
"completedAt": null,
"createdAt": "ISO date"
}
],
"2026-05-02": []
},
"completion_log": [
{
"date": "2026-05-16",
"completed": ["task-id-1", "task-id-2"],
"total": 3,
"rate": 0.67
}
]
}
💡 年目标与月目标是并列的,不存在包含关系:用户独立设定年目标和月目标,日任务由二者共同生成。
💡 跨月目标处理:拆分为两条记录,分别写入对应月份文件,各月标注进度比例。
💡 notes 字段:目标的日志记录,用于记录目标的完整生命周期事件,包括进度更新、阶段性成果、完成记录等。每条记录含 id、date、content,按时间倒序存储(最新的在前)。新建目标时 notes 默认为空数组 []。完成目标、补充备注、删除目标等操作均应自动写入一条 note。
💡 progress 字段:目标当前进度,浮点数 0~1(归一化),0 表示未开始,1 表示已完成。新建目标时默认为 0,目标 completed=true 时为 1。补充备注时根据备注内容智能推断进度并更新此字段;若无法推断则保持原值不变。展示时乘以 100 转为百分比显示。
⚠️ completion_log 按日期倒序存储(最新的在前)。
Trigger: "修改数据目录", "换个存储位置", "数据存到XX"
将 config.json 中的 dataDir 更新为用户指定路径,并提示是否迁移已有数据文件到新目录。
Trigger: "添加目标", "新增", "加一条", "我要..."
识别层级:
跨月目标(如「5月、6月减肥15斤」):
拆分为两条记录,分别写入 monthly/2026-05.json 和 monthly/2026-06.json 的 goals 字段,content 注明归属月份。
添加后自动提示是否需要基于此目标自动生成日任务。
Trigger: "查看目标", "我的目标", "看看计划", "列出"
显示指定年/月的目标,注明已完成状态。
Trigger: "补充备注", "记录进度", "记一下", "已完成XX(非完成目标)"
为目标添加附属备注信息,不改变目标的完成状态。
⚠️ 补充备注 ≠ 完成目标,仅记录进度细节,不自动修改 completed 状态。
Trigger: "查看今日任务", "今日任务", "今天的任务"
读取 monthly/{YYYY-MM}.json 的 days.{YYYY-MM-DD} 字段(当日),展示当日任务及完成状态。
Trigger: "完成了XX", "XX做完了", "删除XX", "完成目标:XX", "删除目标:XX"
Trigger: "查看本月汇总", "本月汇总", "月度汇总"
读取 monthly/{YYYY-MM}.json 的 completion_log,输出本月完成率和目标完成情况。
Trigger: "生成明天任务", "更新日任务"
读取月/年目标,智能生成日任务(按来源标注)。
每日 21:00 日任务生成规则:
年目标与月目标是并列的,日任务由二者共同生成,不存在"年目标拆解为月目标"的逻辑。
config.dataDir 目录下的全部内容(含 goals_yearly.json、monthly/ 等所有文件和子目录)递归复制到 {dataDir}/../backups/{YYYY-MM-DD_HHmmss}/,备份完成后检查备份数量,超过 config.maxBackups 则按时间倒序删除最旧的备份
⚠️ 关键规则:日任务内容按目标原文长度决定展示方式,绝不自行推测时间/数量!
减肥7斤
读完8本书
减肥7斤
学习前端开发
手动日任务:用户随时可添加,source=manual
⚠️ 触发机制:skill 本身无法设置系统定时器,以下定时任务由外部调度器(如 cron、云函数定时触发)按时间调用,或由用户发消息时检查当前时间判断是否需要执行。
读取 monthly/{YYYY-MM}.json 的 days.{YYYY-MM-DD} 字段(当日),重点展示未完成任务,简要提及月/年目标。
执行"自动生成逻辑",生成次日任务。
读取 monthly/{YYYY-MM}.json 的 completion_log,取本月记录,输出月度复盘。
> 以下为模板定义,{} 内为动态变量,实际推送时替换为真实数据。
📅 {M}月{D}日 {周X}
⏳ 今日任务:{未完成数}项未完成
{序号}. [ ] {任务内容} {来源标签}
{序号}. [x] {任务内容} {来源标签}
...
—— 🎯 目标进度 ——
{YYYY}年 | {目标内容}
{进度条} {百分比}%
{M}月 | {目标内容}
{进度条} {百分比}%
(仅展示未完成的年/月目标,已完成的不显示)
...
变量说明:
{M}月{D}日 {周X} + 未完成数;全部完成时显示 ⏳ 今日任务:全部完成 ✓
[ ] 未完成,[x] 已完成
[年]、月目标 [月]、手动添加不显示
completed=false 的年/月目标,已完成的不显示(避免消息随完成数增多而变长);年目标用 {YYYY}年 | 标注年份,月目标用 {M}月 | 标注月份;进度百分比由 progress 字段(0~1)乘以 100 取整得到;进度条 10 格,█ 填充 + ░ 空白
✅ 明日任务已生成
📆 {次日M}月{次日D}日 | 共{任务数}项
{序号}. {任务内容} {来源标签}
...
晚安,明天也要加油呀 💪
变量说明:
[年]、月目标 [月]、手动添加不显示
📊 {M}月目标复盘
━━━━━━━━━━━━━━━━
📈 整体完成率:{百分比}%
📅 达标天数:{达标天数}天 / {有记录天数}天
— 目标完成情况 —
{目标内容} ✅ 已完成
{目标内容} 🔄 进行中({百分比}%)
...
— 任务统计 —
📝 总任务:{总数}项
✅ 已完成:{完成数}项
☐ 未完成:{未完成数}项
{M+1}月继续加油,未来可期 ✨
当用户说"完成了XX":
{任务内容} ✓ 剩余 {N} 项
今日任务全部完成 ✓
monthly/{nextYear}-01.json,读取的月目标也是1月的,年目标取新年份
monthly/2026-12.json,即使当前已进入1月,完成记录仍归属于任务所在月份
monthly/{YYYY-MM}.json 的 days.{YYYY-MM-DD} 字段
monthly/2026-05.json
config.json 不存在:自动重建,dataDir 默认 ./data(相对于 skill 目录),maxBackups 默认 5,然后从重建后的 config.json 中读取配置,并提示用户「配置文件缺失,已用默认配置重建」
config.json 内容非法(JSON 解析失败):备份原文件为 config.json.broken,用默认值重建,提示用户「配置文件损坏,已备份并重建默认配置」
dataDir 目录是否存在,不存在则自动创建(含 monthly/ 子目录)
goals_yearly.json.broken,重建空模板 {},提示用户「年度目标文件损坏,已备份并重建空文件,历史数据需手动恢复」
{YYYY-MM}.json.broken,重建空模板(goals/days/completion_log),提示用户「X月数据文件损坏,已备份并重建空文件,该月历史数据需手动恢复」
.broken 备份,再重建
Date.now() + 随机数 拼接生成,不依赖外部 UUID 库。示例:Date.now().toString(36) + Math.random().toString(36).slice(2, 8)
共 7 个版本