这篇文章写给刚上手 OpenClaw 的新手龙虾。 目标:搭建一套「不需要你主动去查」的日程管理系统,让 AI agent 在每天的关键时间点主动找你,而不是等你问它。
一、为什么要主动式日程管理?
大多数人的日程管理工具是「被动的」:
- 日历:只在你打开它的时候才有用
- Todo App:记进去就忘了看
- 普通 AI 助手:你不问它,它不开口
这类工具有一个共同问题:责任在你身上。你得记得去看,去查,去问。
OpenClaw 可以反转这个关系。通过配置定时任务,让 agent 在合适的时间主动推消息给你,把「你需要知道的事」送到你面前,而不是等你去找。
这篇文章介绍如何从零搭建这套系统。
二、系统整体架构
整套系统由三个部分构成:
提醒库 (reminders.md)
↓ agent 定时扫描
定时任务 (cron jobs) → 主动推送消息给你
↑
每日日志 (daily-log/) ← 根据你的回复自动记录
三个核心文件:
| 文件 | 作用 | 谁来写 |
|---|---|---|
reminders.md | 临时性待办事项 | 你来维护 |
daily-log/YYYY-MM-DD.md | 每天的行动记录 | agent 帮你写 |
cron/jobs.json | 定时任务配置 | 一次性配置好 |
三、第一步:建立你的提醒库
在你的 workspace 下创建 reminders.md,格式如下:
# 提醒事项
| 日期 | 事项 | 优先级 | 状态 |
|------------|---------------------|--------|--------|
| 2026-04-15 | 合同续签到期 | 高 | 待处理 |
| 2026-05-01 | 年度健康复查 | 中 | 待处理 |
| 2026-04-20 | 朋友生日 | 低 | 待处理 |
使用原则:
- 只记「容易忘、有具体日期」的事情
- 不要把所有事情都堆进来,否则会变成噪音
- 完成后把状态改成「已完成」,或者直接删掉这一行
四、第二步:设计你的时间节点
这是整套系统最重要的设计决策:你需要哪些时间节点?
以下是一套经过验证的基础配置,适合大多数人:
推荐节点
| 时间 | 节点名称 | 核心作用 |
|---|---|---|
| 08:00 | 晨间播报 | 知道今天要做什么 |
| 12:00 | 上午复盘 | 记录上午完成情况 |
| 14:00 | 下午提醒 | 防止下午失焦 |
| 21:00 | 晚间复盘 | 整理当天记录 |
| 22:00 | 日志兜底 | 没回复也自动补全 |
各节点设计要点
08:00 晨间播报
这是一天中最重要的节点。内容要包含:
- 今天有哪些提醒事项(从
reminders.md里提取) - 未来 3 天内即将到期的事项(提前预警)
- 今天的常规日程框架(可根据自己的节奏自定义)
示例消息效果:
早上好!今日日程播报:
📌 今日提醒
- 下午4点:团队周会
📅 近期预告(3天内)
- 明天:房租到期
🗓️ 今日常规日程
- 09:30 早间市场查看
- 15:00 集中工作时段
- 17:30 结束工作,家庭时间
12:00 上午复盘
一句话询问就够:「上午完成了哪些事?」
你随手回复关键词,agent 帮你记录到日志。不要把这个节点设计得太重,否则你会开始回避它。
14:00 下午提醒
有临时事项就提临时事项,没有就提你自己定义的「下午常规」。这个节点的作用是防止过了午饭后陷入失焦状态。
21:00 晚间复盘
一句话问一下当天情况,你回复后 agent 整理成完整日志。
22:00 日志兜底(强烈推荐)
这个节点经常被忽略,但非常重要。
逻辑:如果你 21:00 没回复,22:00 agent 会根据当天的对话记录和 memory 自动生成一份日志,末尾标注「自动生成」。
效果:哪怕你某天完全忘了复盘,也不会断档。
五、第三步:配置 Cron 任务
在 /root/.openclaw/cron/jobs.json 里配置定时任务。每个节点对应一个 job。
基础结构
{
"version": 1,
"jobs": [
{
"id": "唯一ID(用UUID生成器生成一个)",
"agentId": "你的agent名称",
"name": "job的名称",
"enabled": true,
"schedule": {
"kind": "cron",
"expr": "0 8 * * 1-6",
"tz": "Asia/Shanghai"
},
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "你希望 agent 执行的指令(自然语言描述即可)"
},
"delivery": {
"mode": "announce"
}
}
]
}
关键字段说明
| 字段 | 说明 |
|---|---|
agentId | 执行这个任务的 agent,填你自己的 agent 名称 |
expr | cron 表达式,0 8 * * 1-6 = 周一到周六早8点 |
tz | 时区,中国用 Asia/Shanghai |
message | 用自然语言描述任务,不用写代码 |
常用 cron 表达式参考
0 8 * * 1-6 每周一到周六 08:00
0 12 * * 1-6 每周一到周六 12:00
0 21 * * 1-6 每周一到周六 21:00
0 22 * * * 每天 22:00(含周日)
30 8 * * 1-6 每周一到周六 08:30
五个节点的完整配置示例
{
"version": 1,
"jobs": [
{
"id": "替换为UUID-1",
"agentId": "你的agent名称",
"name": "morning-briefing",
"enabled": true,
"schedule": { "kind": "cron", "expr": "0 8 * * 1-6", "tz": "Asia/Shanghai" },
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "【08:00 晨间播报】检查 reminders.md 中今天到期的提醒,列出未来3天内即将到期的事项,附上今日常规日程,通过消息发送给用户。周日不发。"
},
"delivery": { "mode": "announce" }
},
{
"id": "替换为UUID-2",
"agentId": "你的agent名称",
"name": "noon-checkin",
"enabled": true,
"schedule": { "kind": "cron", "expr": "0 12 * * 1-6", "tz": "Asia/Shanghai" },
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "【12:00 上午复盘】向用户发送消息,询问上午完成了哪些事项,用户回复后记录到今日 daily-log。周日不发。"
},
"delivery": { "mode": "announce" }
},
{
"id": "替换为UUID-3",
"agentId": "你的agent名称",
"name": "afternoon-reminder",
"enabled": true,
"schedule": { "kind": "cron", "expr": "0 14 * * 1-6", "tz": "Asia/Shanghai" },
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "【14:00 下午提醒】检查 reminders.md 是否有今天或明天到期的提醒,有则优先提;若无,提醒下午的常规安排。通过消息发送给用户。周日不发。"
},
"delivery": { "mode": "announce" }
},
{
"id": "替换为UUID-4",
"agentId": "你的agent名称",
"name": "evening-recap",
"enabled": true,
"schedule": { "kind": "cron", "expr": "0 21 * * 1-6", "tz": "Asia/Shanghai" },
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "【21:00 晚间复盘】向用户发送简短询问:「今天进展如何?有什么要记录的吗?」用户回复后整理成今日总结写入 daily-log/YYYY-MM-DD.md,回复日志路径。周日不发。"
},
"delivery": { "mode": "announce" }
},
{
"id": "替换为UUID-5",
"agentId": "你的agent名称",
"name": "log-auto-close",
"enabled": true,
"schedule": { "kind": "cron", "expr": "0 22 * * 1-6", "tz": "Asia/Shanghai" },
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "【22:00 日志兜底】检查今天的 daily-log 是否已有完整总结。若已有,跳过。若没有,根据今天的 memory 和对话记录自动整理写入,末尾标注「⚙️ 自动生成(用户未回复)」。静默执行,不发消息。"
},
"delivery": { "mode": "announce" }
}
]
}
六、每日日志:让记录自动发生
每日日志保存在 daily-log/ 目录下,按日期命名:2026-04-01.md。
推荐格式:
# 2026-04-01
## 上午完成
- [你回复的内容,由 agent 整理]
## 下午完成
- [你回复的内容,由 agent 整理]
## 当日总结
[21:00 复盘时你说的,或者 22:00 自动生成的]
你不需要自己写。你只需要在 12:00 和 21:00 用一两句话回复 agent,它帮你整理成标准格式。
七、设计你自己的「常规日程」
每个人的生活节奏不一样。在配置晨间播报和下午提醒时,你需要把自己的「常规日程」告诉 agent。
例如:
我的常规日程:
- 09:00 处理邮件
- 10:00 核心工作时段(不接会议)
- 12:30 午饭
- 14:00–17:00 会议 / 协作时段
- 17:30 下班
- 20:00 阅读 / 学习
把这段话写进你的 HEARTBEAT.md 或 MEMORY.md,让 agent 在生成播报时参考。
八、一个重要原则:周日不打扰
强烈建议:把所有提醒节点的 cron 表达式设为 * * 1-6(只在周一到周六执行)。
如果实在需要某些周日任务(比如日志兜底),也要让 agent 在执行时保持静默,不发消息。
理由:如果系统每天都在催你,很快会变成新的压力来源,你会开始屏蔽它。
周末留给自己,工作日让系统高效运转。
九、常见问题
Q:修改 jobs.json 后需要重启 gateway 吗?
需要。但注意:不要在早上 8 点前后重启,否则已经过期的 cron 任务不会补跑,早间播报会漏掉。
建议在下午或傍晚时段修改配置并重启。
本文基于 OpenClaw 实际运行经验整理,适用于 OpenClaw 2026.x 版本。