OpenClaw Timebox
一套全天维度的任务管理工作法,分四个阶段:
CODEBLOCK0
每个时间盒是一个不可拆分的执行单元,AI 不干预盒内执行细节,只负责规划、衔接和复盘。
使用方式
CODEBLOCK1
偏好配置(EXTEND.md)
按优先级搜索以下路径,找到即用:
- 1. 项目级: INLINECODE0
- 用户级: INLINECODE1
如果 EXTEND.md 不存在,MUST 执行首次配置(见下方章节),完成后继续。
CODEBLOCK2
首次配置
EXTEND.md 不存在时,一次性提问以下四项,创建文件后继续。
问题 1:默认时间盒时长
你常用的专注时长是多少分钟?
推荐:25 分钟(番茄钟)/ 45 分钟(深度工作)/ 90 分钟(长任务)/ 自定义
问题 2:日历工具
你用哪个日历记录时间安排?时间盒会自动在日历里创建占位事件。
| 选项 | 说明 |
|---|
| INLINECODE2 | 苹果日历(Apple Calendar),本地,无需配置 |
| INLINECODE3 |
企业微信日历,需要企业微信登录态 |
|
feishu | 飞书日历,需要飞书 API Token |
|
google | Google 日历,需要 Google OAuth |
|
none | 不使用日历 |
选择后追问:
- - 若
macos:使用哪个日历名称?(默认"工作",不存在则用默认日历) - 若
feishu / google / wecom:需要提供对应 Token 或引导完成授权
问题 3:任务同步到滴答清单(TickTick)
是否将每个时间盒任务自动同步到滴答清单?规划时创建任务,完成时标记勾选。
| 选项 | 说明 |
|---|
| INLINECODE11 | 同步到 TickTick 国际版(ticktick.com) |
| INLINECODE12 |
同步到滴答清单
中国版(dida365.com,使用 dida-cli) |
|
none | 不同步(默认)|
⚠️ 国际版与中国版账号完全独立,token 不互通,请根据你的实际登录平台选择。
若选择 dida365(中国版,推荐)
使用 dida-cli 方案,无需注册开发者 App,一条命令完成授权。
Step 1:检查 dida-cli 是否已安装且已登录
CODEBLOCK3
- - 输出已登录 → 跳到 Step 3
- 命令不存在 → 继续 Step 2 安装
- 输出未登录 → 直接执行 Step 2 登录
Step 2:安装 dida-cli 并授权
CODEBLOCK4
浏览器弹出滴答清单授权页,登录并授权后返回命令行即完成。授权完成后再次执行 dida auth status 确认。
Step 3:选择同步清单
"要同步到哪个清单?(留空用收件箱,或告诉我清单名称)"
AI 拉取用户现有清单并展示:
CODEBLOCK5
用户选择后,将清单 ID 写入 dida_project_id(留空则用收件箱)。
若选择 ticktick(国际版)
Step 1:检查 token 是否已存在且有效
CODEBLOCK6
- - 输出
ok → 跳到 Step 4 - 输出
fail → 继续 Step 2
Step 2:引导注册开发者 App(首次必做,约 3 分钟)
AI 告知用户:
"需要先在 TickTick 开放平台注册一个 App,获取 clientid 和 clientsecret,整个过程约 3 分钟,只需做一次。
请按以下步骤操作:
- 1. 访问 https://developer.ticktick.com/ 用 TickTick 账号登录
- 点击「Register App」
- App Name 随意填(如
timebox-local) - Redirect URI 填: INLINECODE21
- 提交后复制 Client ID 和 Client Secret,告诉我。"
Step 3:写入授权脚本并执行
AI 收到 clientid 和 clientsecret 后,将授权脚本写入 ~/.config/timebox/ticktick_auth.py(填入真实 credentials,见滴答清单集成章节脚本模板),然后告知用户运行:
CODEBLOCK7
用户完成浏览器授权后,AI 重新执行 Step 1 验证。
Step 4:选择同步清单
"要同步到哪个清单?(留空用收件箱,或告诉我清单名称)"
CODEBLOCK8
用户选择后,将清单 ID 写入 ticktick_project_id(留空则用收件箱)。
问题 4:日志工具
你用什么记录工作日志?每个时间盒的执行记录和复盘会自动写入。
| 选项 | 说明 |
|---|
| INLINECODE24 | 本地 Markdown 文件(默认,无需配置) |
| INLINECODE25 |
飞书文档,需要飞书 API Token + 文档 ID |
|
wecom_doc | 企业微信文档,需要企业微信登录态 |
|
notion | Notion,需要 Integration Token + Database ID |
|
google_doc | Google Docs,需要 Google OAuth |
|
flomo | Flomo,需要 Flomo API URL(在 Flomo 个人设置页面获取)|
选择后追问对应的 Token / ID / 路径配置项(若需要)。
问题 5:交互语言
中文 / English
日历集成
通用行为
- - PLAN 阶段时间分配确认后,为每个时间盒批量创建日历事件
- 事件标题格式: INLINECODE30
- 事件描述:任务名 + 优先级 + 紧急程度
- CHECK 收集完成后,更新对应事件备注(追加实际完成情况)
- 任何日历操作失败,仅提示,不阻断主流程
各平台实现
macOS Apple Calendar(AppleScript)
CODEBLOCK9
飞书日历(Feishu Calendar API)
CODEBLOCK10
企业微信日历(WeCom)
企业微信日历暂无开放 API,使用 AppleScript 控制企业微信桌面端或提示用户手动创建。
Google Calendar API
# 请求方式:POST
# 接口:https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events
# 请求头:需携带 Google OAuth Token(header: X-Token: {oauth_token})
# 请求体:
{
"summary": "[Timebox #{N}] {任务名}",
"start": { "dateTime": "{ISO8601}" },
"end": { "dateTime": "{ISO8601}" }
}
日志集成
通用行为
- - 每天在 PLAN 阶段确认时间分配后,创建当日日志并写入今日规划
- RUN 阶段每个时间盒启动时,追加启动记录到本地日志
- CHECK 阶段收集每个时间盒结果后,追加结果记录到本地日志
- REVIEW 阶段将每日总结写入本地日志
- 外部工具同步(flomo、Notion 等):仅在 REVIEW 完成后推送每日总结,不推送逐条执行记录
- 任何日志写入失败,仅提示,不阻断主流程
各平台实现
本地 Markdown(local)
存储结构:
CODEBLOCK12
飞书文档(feishu_doc)
CODEBLOCK13
企业微信文档(wecom_doc)
通过企业微信文档 API 写入,需要企业自建应用 Token。
Notion
CODEBLOCK14
Google Docs
CODEBLOCK15
Flomo
# 请求方式:POST
# 接口:{flomo_api_url}(在 Flomo 个人设置中获取)
# 请求体:{ "content": "[Timebox #{N}] {任务名}\n{执行记录}\n{复盘内容}" }
# Flomo 每条为独立笔记,建议每个时间盒一条,复盘单独一条
滴答清单(TickTick / 滴答清单)集成
仅当 task_sync: ticktick 或 task_sync: dida365 时生效。
国际版 vs 中国版
| 国际版(ticktick) | 中国版(dida365) |
|---|
| 授权方式 | Python OAuth 脚本(需注册 App) | dida-cli(dida auth login,无需注册 App) |
| 任务操作 |
REST API(
api.ticktick.com) |
dida task CLI 命令 |
| 清单配置字段 |
ticktick_project_id |
dida_project_id |
两个版本账号独立,token 不互通。
dida365(中国版)—— 使用 dida-cli
所有操作通过 @suibiji/dida-cli 完成,无需手动管理 token。
通用行为
- - PLAN 阶段确认时间分配后,为每个时间盒创建对应任务
- CHECK 阶段收集完毕后,更新任务(追加 CHECK 结果到 content)
- REVIEW 完成后,将完成的时间盒任务标记为已完成
- 未完成的时间盒任务保留在清单中,便于次日处理
- 任何 dida-cli 操作失败,仅提示,不阻断主流程
检查 dida-cli 可用性
每次操作前先确认 CLI 已安装且已登录:
CODEBLOCK17
若未登录,提示用户执行 dida auth login;若未安装,提示先运行 npm install -g @suibiji/dida-cli。
创建时间盒任务(PLAN 完成时)
CODEBLOCK18
INLINECODE41 留空则创建到收件箱(didaprojectid 为空时省略该参数)。
从返回 JSON 中取 id 字段,写入日志: INLINECODE43
更新任务(CHECK 完成时)
从日志取出该时间盒的 ticktick_id(即 dida task id):
CODEBLOCK19
标记完成(REVIEW 完成时)
CODEBLOCK20
ticktick(国际版)—— 使用 REST API
运行时配置
CODEBLOCK21
通用行为
- - PLAN 阶段确认时间分配后,为每个时间盒创建对应任务
- CHECK 阶段收集完毕后,更新任务
- REVIEW 完成后,将完成的时间盒任务标记为已完成
- 未完成的时间盒任务保留在清单中
- 任何 API 调用失败,仅提示,不阻断主流程
Token 读取
每次调用前从 ticktick_token_file 读取 access_token:
CODEBLOCK22
若读取失败或文件不存在,提示用户重新运行 ticktick_auth.py。
创建时间盒任务(PLAN 完成时)
CODEBLOCK23
更新任务(CHECK 完成时)
CODEBLOCK24
标记完成(REVIEW 完成时)
CODEBLOCK25
授权脚本(ticktick 国际版专用)
脚本存放在 ~/.config/timebox/ticktick_auth.py:
CODEBLOCK26
运行方式:
CODEBLOCK27
国际版用户运行方式:
python3 ~/.config/timebox/ticktick_auth.py
完整工作流
Phase 1 · PLAN · 早晨规划
触发时机:每天开始工作时,或用户说"开始今天的规划"。
Step 1 — 任务收集(用户主导,AI 倾听)
AI 开启一段开放式收集对话,让用户把今天所有想做的事都说出来:
"今天有哪些事要做?把脑子里所有的都说出来,可以同时告诉我优先级、紧急程度、预计时间和时长,没有的话我们之后再确认。说完告诉我'说完了'。"
用户可以一次说完,也可以分多条输入,格式自由,例如:
- - "开会,10点,1小时,很紧急"
- "写周报,不急,大概半小时"
- "回复客户邮件"(无时间信息,后续补充)
AI 在这个阶段只做一件事:逐条记录,不插话。
Step 2 — AI 整理清单
用户说完后,AI 将所有任务整理成结构化清单,尽可能从用户输入中提取已有信息:
CODEBLOCK29
- - 用户已提供的字段直接填入
- 用户未提供的字段标为
—,不在此处追问,进入 Step 3 统一补充
Step 3 — 补全缺失信息
清单确认后,AI 只针对有缺失字段的任务一次性追问,按任务分组:
"以下任务还缺一些信息,帮我确认一下:
回复客户邮件:优先级和紧急程度怎么看?大概需要多久?有没有要在特定时间做?
写周报:计划几点开始?"
用户补充后,AI 更新清单。若用户仍未提供某字段,AI 根据上下文合理推断并标注"(推断)",不再追问。
Step 4 — 优先级讨论(AI 主导对话)
清单完整后,AI 与用户讨论执行顺序。用自然对话,不用表格,针对清单提出 2–3 个引导性问题:
- - "今天如果只能完成一件事,你会选哪个?"
- "有没有哪个任务今天必须完成,否则会影响别人?"
- "有没有固定时间的事项需要作为锚点?"
根据用户回答,AI 输出排序后的执行顺序建议并说明理由。
Step 5 — 时间分配确认
基于优先级排序、固定时间锚点和用户可用时间,AI 给出完整的今日安排:
CODEBLOCK30
固定时间事项(会议、外出等)标注为 📌,不放入时间盒编号。
用户确认或调整后:
- - 写入今日日志
- 根据
calendar 配置批量创建日历事件 - 若
task_sync: dida365:为每个时间盒执行 dida task create,将返回的任务 id 追加到日志执行记录中(格式:[ticktick_id: {id}]) - 若
task_sync: ticktick:为每个时间盒调用 POST /open/v1/task 创建任务,将返回的 task_id 追加到日志执行记录中(格式:[ticktick_id: {id}])
Phase 2 · RUN · 执行时间盒
触发时机:用户说"开始"、"开始第 N 个"或"开始做{任务名}"。
AI 做两件事,然后不再干预:
- 1. 输出启动卡片(根据
runtime 显示不同提示):
codebuddy 模式:
CODEBLOCK31
openclaw 模式:
CODEBLOCK32
- 2. 在本地日志写入启动记录: INLINECODE59
- 3. 仅 openclaw 模式:注册一个 cron job,在时间盒计划结束时间触发 REMIND:
CODEBLOCK33
然后等待,期间不发送任何消息,不向外部工具同步。
原则:时间盒内是用户的专注时间,AI 不拆解任务、不询问进度、不主动打扰(codebuddy 模式靠用户主动回来,openclaw 模式靠 cron 到点提醒)。
Phase 2.5 · REMIND · 时间盒结束提醒
触发时机(仅 openclaw 模式):cron job 在时间盒计划结束时间触发。
AI 发送一条简短提醒,引导用户进入 CHECK:
CODEBLOCK34
- - 若用户 5 分钟内无响应,不再追发,等用户主动回来
- 用户回复任何内容后,直接进入 Phase 3 · CHECK
- cron 执行后自动注销,不重复触发
Phase 3 · CHECK · 单盒快速收集
触发时机:用户完成(或中断)一个时间盒后,说"完成了"、"结束了"、"超时了"等。
AI 用一次性提问收集结果:
"快速记录一下:
- 1. 完成了吗?(完成 / 部分完成 / 未完成)
- 一句话说说结果或卡点?
- 有没有新冒出来的任务?"
收到回复后,AI:
- - 将结果追加写入日志(含实际用时与计划用时对比)
- 若
task_sync: dida365:从日志取出该时间盒的 ticktick_id,执行 dida task update {id} 追加 CHECK 结果 - 若
task_sync: ticktick:从日志中取出该时间盒的 ticktick_id,调用 POST /open/v1/task/{id} 更新任务 content,追加 CHECK 结果 - 若有新任务,加入今日清单并提示是否调整后续顺序
- 输出下一个时间盒启动提示:
CODEBLOCK35
若今日所有时间盒执行完毕,提示进入 REVIEW:
CODEBLOCK36
原则:CHECK 最多 1 轮对话,不展开分析,分析留给全天 REVIEW。
Phase 4 · REVIEW · 全天复盘
触发时机:用户说"今天结束了"、"复盘"、"review",或所有时间盒执行完毕后用户确认。
AI 基于全天日志生成每日总结报告:
CODEBLOCK37
复盘完成后:
- - 将报告写入今日日志
- 更新
index.md(local 模式)或对应平台索引 - 若
task_sync: dida365:对所有已完成的时间盒任务执行 dida task complete {project_id} {task_id};未完成任务保留在清单(供次日处理) - 若
task_sync: ticktick:对所有已完成的时间盒任务调用 POST /open/v1/task/{id}/complete;未完成任务保留在清单(供次日处理) - 询问:"是否把未完成任务带入明天的规划?"
日志格式(local 模式)
每日日志({YYYY-MM-DD}.md)
CODEBLOCK38
index.md
CODEBLOCK39
与其他 Skill 的联动
| 场景 | 联动 Skill |
|---|
| 将全天复盘生成可视化卡片 | INLINECODE72 |
| 将复盘整理成汇报 PPT |
baoyu-slide-deck |
| 分享复盘到社交平台 |
baoyu-post-to-wechat /
baoyu-post-to-weibo |
AI 行为原则
- 1. 任务收集阶段不打断:用户说完之前,AI 只记录,不评价、不归类
- 缺失信息分两步处理:Step 2 先整理清单展示已有信息,Step 3 再一次性补全缺失字段,避免边收集边追问
- 推断优于追问:用户二次补充后仍缺失的字段,AI 合理推断并标注"(推断)",不反复询问
- 时间盒内不干预:RUN 阶段 AI 保持沉默,等用户主动回来(codebuddy)或 cron 到点提醒(openclaw)
- REMIND 只发一次:openclaw 模式下 cron 触发提醒后,5 分钟内无响应不再追发,等用户主动
- CHECK 保持轻量:单盒收集最多 1 轮对话,不展开分析
- 复盘才是深度分析的时机:规律总结、原因分析统一放到全天 REVIEW
- 本地日志完整记录:规划 + 每条执行记录(含 ticktickid)+ 每日总结 + 全天复盘,全部写入本地
- 外部工具只同步摘要:flomo、Notion 等外部工具仅在 REVIEW 完成后推送"每日总结 + 全天复盘"两段,不推送逐条执行记录
- 不阻断流程:日历/日志写入失败、cron 注册失败、TickTick API 调用失败等外部错误,提示后继续执行
- TickTick 操作静默执行:创建/更新/完成任务时不在对话中展开 API 细节,成功则简短提示("✓ 已同步到滴答清单"),失败则提示错误并继续
- TickTick taskid 持久化:每个时间盒的 ticktick_id 必须写入本地日志,以保证 CHECK 和 REVIEW 阶段能定位到对应任务
OpenClaw Timebox
一套全天维度的任务管理工作法,分四个阶段:
早晨规划(PLAN)→ 执行时间盒(RUN)→ 单盒收集(CHECK)→ 全天复盘(REVIEW)
每个时间盒是一个不可拆分的执行单元,AI 不干预盒内执行细节,只负责规划、衔接和复盘。
使用方式
bash
/openclaw-timebox-cpr # 开始今天的规划
/openclaw-timebox-cpr --run # 跳过规划,直接开始一个时间盒
/openclaw-timebox-cpr --check # 完成一个时间盒后做快速收集
/openclaw-timebox-cpr --review # 全天结束后做整体复盘
/openclaw-timebox-cpr --log # 查看今日日志摘要
偏好配置(EXTEND.md)
按优先级搜索以下路径,找到即用:
- 1. 项目级:{project}/.baoyu-skills/openclaw-timebox-cpr/EXTEND.md
- 用户级:~/.baoyu-skills/openclaw-timebox-cpr/EXTEND.md
如果 EXTEND.md 不存在,MUST 执行首次配置(见下方章节),完成后继续。
yaml
default_timebox: 25 # 默认单个时间盒时长(分钟)
calendar: macos # 日历工具(见支持列表)
calendar_name: 工作 # 日历名称/账户
calendaralertbefore: 2 # 提醒提前几分钟
log_backend: local # 日志工具(见支持列表)
log_dir: ~/.openclaw/logs # 仅 local 模式使用
log_token: # 第三方日志工具的 Token/Key(如需要)
log_workspace: # 第三方日志工具的空间/数据库 ID(如需要)
task_sync: none # 任务同步:ticktick(国际版)| dida365(中国版,使用 dida-cli)| none
tickticktokenfile: ~/.config/timebox/ticktick.json # ticktick 国际版 token 文件路径
ticktickprojectid: # ticktick 国际版:同步到哪个清单(留空则用收件箱)
didaprojectid: # dida365 中国版:同步到哪个清单 ID(留空则用收件箱)
lang: zh # zh | en
runtime: codebuddy # 运行环境:codebuddy | openclaw
首次配置
EXTEND.md 不存在时,一次性提问以下四项,创建文件后继续。
问题 1:默认时间盒时长
你常用的专注时长是多少分钟?
推荐:25 分钟(番茄钟)/ 45 分钟(深度工作)/ 90 分钟(长任务)/ 自定义
问题 2:日历工具
你用哪个日历记录时间安排?时间盒会自动在日历里创建占位事件。
| 选项 | 说明 |
|---|
| macos | 苹果日历(Apple Calendar),本地,无需配置 |
| wecom |
企业微信日历,需要企业微信登录态 |
| feishu | 飞书日历,需要飞书 API Token |
| google | Google 日历,需要 Google OAuth |
| none | 不使用日历 |
选择后追问:
- - 若 macos:使用哪个日历名称?(默认工作,不存在则用默认日历)
- 若 feishu / google / wecom:需要提供对应 Token 或引导完成授权
问题 3:任务同步到滴答清单(TickTick)
是否将每个时间盒任务自动同步到滴答清单?规划时创建任务,完成时标记勾选。
| 选项 | 说明 |
|---|
| ticktick | 同步到 TickTick 国际版(ticktick.com) |
| dida365 |
同步到滴答清单
中国版(dida365.com,使用 dida-cli) |
| none | 不同步(默认)|
⚠️ 国际版与中国版账号完全独立,token 不互通,请根据你的实际登录平台选择。
若选择 dida365(中国版,推荐)
使用 dida-cli 方案,无需注册开发者 App,一条命令完成授权。
Step 1:检查 dida-cli 是否已安装且已登录
bash
dida auth status
- - 输出已登录 → 跳到 Step 3
- 命令不存在 → 继续 Step 2 安装
- 输出未登录 → 直接执行 Step 2 登录
Step 2:安装 dida-cli 并授权
bash
npm install -g @suibiji/dida-cli
dida auth login
浏览器弹出滴答清单授权页,登录并授权后返回命令行即完成。授权完成后再次执行 dida auth status 确认。
Step 3:选择同步清单
要同步到哪个清单?(留空用收件箱,或告诉我清单名称)
AI 拉取用户现有清单并展示:
bash
dida project list --json
用户选择后,将清单 ID 写入 didaprojectid(留空则用收件箱)。
若选择 ticktick(国际版)
Step 1:检查 token 是否已存在且有效
bash
python3 -c
import json, urllib.request
try:
t = json.load(open($HOME/.config/timebox/ticktick.json))
req = urllib.request.Request(https://api.ticktick.com/open/v1/project)
req.addheader(Authorization, fBearer {t[\accesstoken\]})
urllib.request.urlopen(req); print(ok)
except Exception as e: print(fail)
- - 输出 ok → 跳到 Step 4
- 输出 fail → 继续 Step 2
Step 2:引导注册开发者 App(首次必做,约 3 分钟)
AI 告知用户:
需要先在 TickTick 开放平台注册一个 App,获取 clientid 和 clientsecret,整个过程约 3 分钟,只需做一次。
请按以下步骤操作:
- 1. 访问 https://developer.ticktick.com/ 用 TickTick 账号登录
- 点击「Register App」
- App Name 随意填(如 timebox-local)
- Redirect URI 填:http://localhost:8765/callback
- 提交后复制 Client ID 和 Client Secret,告诉我。
Step 3:写入授权脚本并执行
AI 收到 clientid 和 clientsecret 后,将授权脚本写入 ~/.config/timebox/ticktick_auth.py(填入真实 credentials,见滴答清单集成章节脚本模板),然后告知用户运行:
bash
python3 ~/.config/timebox/ticktick_auth.py
用户完成浏览器授权后,AI 重新执行 Step 1 验证。
Step 4:选择同步清单
要同步到哪个清单?(留空用收件箱,或告诉我清单名称)
bash
python3 -c
import json, urllib.request
t = json.load(open($HOME/.config/timebox/ticktick.json))
req = urllib.request.Request(https://api.ticktick.com/open/v1/project)
req.addheader(Authorization, fBearer {t[\accesstoken\]})
data = json.loads(urllib.request.urlopen(req).read())
for p in data: print(p[id], |, p[name])
用户选择后,将清单 ID 写入 ticktickprojectid(留空则用收件箱)。
问题 4:日志工具
你用什么记录工作日志?每个时间盒的执行记录和复盘会自动写入。
| 选项 | 说明 |
|---|
| local | 本地 Markdown 文件(默认,无需配置) |
| feishu_doc |
飞书文档,需要飞书 API Token + 文档 ID |
| wecom_doc | 企业微信文档,需要企业微信登录态 |
| notion | Notion,需要 Integration Token + Database ID |
| google_doc | Google Docs,需要 Google OAuth |
| flomo | Flomo,需要 Flomo API URL(在 Flomo 个人设置页面获取)|
选择后追问对应的 Token / ID / 路径配置项(若需要)。
问题 5:交互语言
中文 / English
日历集成
通用行为