Kinema's Task Management | Kinema 个人任务追踪系统
- Author: LeeShunEE
- Organization: KinemaClawWorkspace
- GitHub: https://github.com/KinemaClawWorkspace/kinema-task-management
⚠️ Before First Use | 首次使用必读
首次使用此 skill 前,必须先读取 ONBOARDING.md 完成环境配置。
- 首次配置 → 读取 ONBOARDING.md 完成全部步骤
- 环境不可用(目录缺失、cron 未配置)→ 读取 ONBOARDING.md Troubleshooting 排查修复
- 配置完成后 → 直接使用下方操作指南
Core Principles | 核心原则
- 你说我存 — 用户用自然语言描述任务,Agent 提问补全后结构化存储
- 不可擅动 — 未经用户明确同意,不修改任何任务的状态
- 主动确认 — Agent 发现某个任务可能已完成时,向用户确认后才标记
- 每日推送 — 每天固定时间推送任务报告
Data Structure | 数据结构
目录路径
TASK_DIR=~/.openclaw/workspace/kinema-tasks
文件夹结构
kinema-tasks/
├── active/ ← 活跃任务(Pending / In Progress / Snoozed)
├── archived/ ← 终结任务(Done / Cancelled)
└── snapshots/ ← 每日快照,按日期保存 YYYY-MM-DD.md
序号管理
- 序号 5 位递增:
TASK-00001→TASK-00002→ ... - 创建新任务时,使用
scripts/next-id.sh获取下一个可用序号 - 序号全局唯一,
active/和archived/共享同一序号空间 - 序号不可复用:已使用的序号永久保留
Task File Format | 任务文件格式
每个任务一个独立 Markdown 文件:TASK-XXXXX.md
# TASK-00001: {标题}
## Metadata
| 字段 | 值 |
|------|-----|
| 状态 | Pending |
| 优先级 | urgent |
| 领域 | OpenClaw生态 |
| 截止日期 | 2026-04-10 |
| 创建时间 | 2026-04-07 |
| 最后更新 | 2026-04-07 |
## 描述
{任务的详细描述,自由格式纯文本}
## Changelog
| 时间 | 变更 |
|------|------|
| 2026-04-07 | 创建任务,状态: Pending |
字段说明
| 字段 | 必填 | 说明 |
|---|---|---|
| 状态 | 是 | Pending / In Progress / Done / Snoozed / Cancelled |
| 优先级 | 是 | urgent / normal / low |
| 领域 | 是 | 预设:OpenClaw生态 / 其他项目 / 生活,可扩展 |
| 截止日期 | 否 | YYYY-MM-DD,无截止日期填 — |
| 创建时间 | 是 | YYYY-MM-DD |
| 最后更新 | 是 | YYYY-MM-DD,每次变更时更新 |
| 描述 | 否 | 自由格式纯文本 |
| Changelog | 是 | 按时间正序追加,不修改已有记录 |
Status Flow | 状态流转
┌──────────┐
│ Pending │
└────┬─────┘
│ 开始执行
▼
┌──────────────┐ 完成(需用户确认)
│ In Progress │────────→ Done → archived/
└──────┬───────┘
│ 暂停
▼
┌──────────┐
│ Snoozed │
└──────────┘
任意状态 ──→ Cancelled(需用户确认)→ archived/
转换规则
| 变更 | 触发方式 | 需要确认 |
|---|---|---|
| Pending → In Progress | 用户指令 | 否 |
| In Progress → Pending | 用户指令 | 否 |
| ↔ Snoozed | 用户指令 | 否 |
| → Done | Agent 主动或用户指令 | 是 |
| → Cancelled | 用户指令 | 是(二次确认) |
| Done / Cancelled | 状态变更后 | 自动移入 archived/ |
Operations | 五种操作
1. 创建任务
触发:用户描述新任务
流程:
- 接收自然语言描述
- 提问补全缺失必填信息(优先级、领域、截止日期)
- 用户确认后,使用
scripts/create-task.sh创建文件 - 返回任务摘要确认
用户: "ClawHub publish 命令在遇到同名版本时报错没有清晰提示"
Agent: "收到,确认几个信息:
1. 优先级?urgent / normal / low
2. 属于哪个领域?OpenClaw生态 / 其他项目 / 生活
3. 截止日期?
4. 补充描述?还是就按你说的来?"
2. 更新任务
触发:用户明确指令
流程:
- 直接修改对应的
.md文件 - 更新 Metadata 表中相关字段和最后更新时间
- 在 Changelog 中追加变更记录
- 状态变为 Done/Cancelled → 使用
scripts/archive-task.sh移入archived/
用户: "TASK-00003 标记为 In Progress"
用户: "TASK-00001 的截止日期改到 4月20日"
3. 批量操作
触发:用户指令涉及多个任务
流程:
- 解析意图,确定受影响任务列表
- 向用户展示将要修改的任务清单,请求确认
- 逐个修改文件(每个文件独立更新 Metadata + Changelog)
- 返回操作摘要
用户: "把所有 normal 的任务截止日期都推迟一天"
Agent: "以下任务将被修改:
- TASK-00002(截止 04/10 → 04/11)
- TASK-00005(截止 04/20 → 04/21)
确认执行?"
4. 取消任务
触发:用户明确说"取消"或"删除"某个任务
流程:
- Agent 向用户确认(取消不可逆)
- 用户同意 → 状态改为
Cancelled,Changelog 追加记录,移入archived/ - 返回确认
5. 主动询问
触发条件:
- 对话中明显完成了某个任务的工作
- 任务描述与最近对话内容高度匹配
- Agent 有合理依据认为任务已达成
流程:
- 向用户提出确认
- 同意 → 标记 Done,移入
archived/ - 拒绝 → 不修改
Daily Report | 每日推送
推送时间
北京时间 09:00(UTC 01:00),每天一次
推送格式
📋 KinemaTasks Daily Report — {M月D日}
{2-3句话状况摘要,由模型根据下方 section 内容生成,非固定模板}
Status: ▶ in_progress ○ pending ✓ done
● URGENT ────────────────────────────────────────────────────────────
▶ TASK-XXXXX Apr 09 2d left 标题 #领域
○ TASK-XXXXX Apr 10 3d left 标题 #领域
● NORMAL ────────────────────────────────────────────────────────────
○ TASK-XXXXX Apr 11 4d left 标题 #领域
✓ TASK-XXXXX Apr 06 done 标题 #领域
● LOW ────────────────────────────────────────────────────────────────
○ TASK-XXXXX — 标题 #领域
● SNOOZED ────────────────────────────────────────────────────────────
○ TASK-XXXXX Apr 12 5d left 标题 #领域
● EXPIRED ────────────────────────────────────────────────────────────
○ TASK-XXXXX Apr 01 6d overdue 标题 #领域
───────────────────────────────────────────────────────────────────────
● RECENTLY DONE ───────────────────────────────────────────────────────
✓ TASK-XXXXX Apr 06 done 标题 #领域
───────────────────────────────────────────────────────────────────────
新增 (N)
TASK-XXXXX 标题 | 优先级 | 领域
状态变更 (N)
TASK-XXXXX 旧状态 → 新状态
字段变更 (N)
TASK-XXXXX 字段 旧值 → 新值
取消 (N)
TASK-XXXXX 标题
状态图例
| 符号 | 状态 |
|---|---|
| ▶ | In Progress |
| ○ | Pending / Snoozed |
| ✓ | Done |
条目格式
每行格式:{符号} TASK-XXXXX {日期} {时间提示} {标题} #{领域}
- 日期:
Apr 09格式,无截止日期显示— - 时间提示:
Nd left/due today/Nd overdue/done(仅已完成任务)/ 无(无截止日期) - 领域:
#领域格式
最近完成的 Done 任务单独列出在「RECENTLY DONE」section,最近 5 条,按完成时间倒序,Cancelled 不展示。
触发方式
报告有两种触发方式:
| 方式 | 触发者 | 执行者 | 说明 |
|---|---|---|---|
| 定时推送 | Cron(每天 09:00/09:01/09:02 BJT) | Isolated session agent | cron 依次执行归档→报告→快照,推送结果 |
| 手动查询 | 用户在对话中询问 | 当前 session agent | Agent 直接在对话中执行,不走 cron |
定时推送流程(Cron)
- 归档检查 cron 扫描 active/,移入 archived/
- 报告 cron 读取 SKILL.md 规范,扫描任务文件,调用
report.sh生成结构化内容,由模型撰写 2-3 句摘要,组装完整报告并推送 - 快照 cron 调用
snapshot.sh写入当日快照
手动查询流程
触发:用户输入 /mytask、询问"看看任务"、"任务列表"、"任务报告"等
- Agent 扫描
active/和archived/中所有任务文件 - 按 SKILL.md 中的推送格式生成完整报告
- 由模型撰写 2-3 句摘要(基于各 section 统计)
- 直接在对话中返回报告,无需调用 cron
/mytask可直接触发手动查询,无需额外参数。
report.sh输出的是不含摘要的结构化部分(当前任务状况 + 昨日变动)。摘要由 Agent 模型根据report.sh的输出内容自行撰写。
Diff 计算规则
对比最近一次快照与当前 active/ 状态:
| 变动类型 | 判断依据 |
|---|---|
| 新增 | 任务 ID 在上次快照中不存在 |
| 状态变更 | 状态字段值不同(Cancelled 单独归入"取消") |
| 字段变更 | 优先级 / 领域 / 截止日期字段值不同 |
| 取消 | 上次快照中存在、当前 archived/ 中状态为 Cancelled |
无上次快照 → 跳过 diff 部分,只输出当日任务状况 无变动 → diff 部分显示"无变动"
当日任务状况分组
| Section | 包含 | 排除 | 排序 |
|---|---|---|---|
| ● URGENT | 优先级 = urgent,未过期 | Snoozed 状态 | 剩余时间升序,无截止日期排末尾 |
| ● NORMAL | 优先级 = normal,未过期 | Snoozed 状态 | 同上 |
| ● LOW | 优先级 = low,未过期 | Snoozed 状态 | 同上 |
| ● SNOOZED | 状态 = Snoozed(无论是否过期) | 无 | 剩余时间升序,无截止日期排末尾 |
| ● EXPIRED | Pending/InProgress + 已过期 | Snoozed 状态 | 过期天数降序(过期最久排前) |
| ● RECENTLY DONE | archived/ 中最近 5 条 Done 任务 | Cancelled | 完成时间倒序 |
最近完成的 Done 任务单独列出在「RECENTLY DONE」section,最近 5 条,按完成时间倒序,Cancelled 不展示。
时间提示格式:
- 未过期有截止日期:
Nd left(如2d left) - 今天截止:
due today - 已过期:
Nd overdue(不再追加 ⚠️) - 已完成:
done - 无截止日期:不显示时间提示
核心规则:Snoozed 状态优先,即使过期也不出现在「EXPIRED」中。
Snapshot | 每日快照
格式
# Snapshot — {YYYY-MM-DD}
> 生成时间:{YYYY-MM-DD} 09:00 BJT
## 任务列表
| 任务 | 标题 | 状态 | 优先级 | 领域 | 截止日期 |
|------|------|------|--------|------|---------|
| TASK-XXXXX | 标题 | 状态 | 优先级 | 领域 | 截止日期 |
## 摘要
共 N 个活跃任务 | N In Progress · N Pending · N Snoozed
快照文件由 cron 写入,不应手动修改。
Cron Jobs | 定时任务
| 任务 | 时间(BJT) | Cron Name | 说明 |
|---|---|---|---|
| 归档检查 | 09:00 | kinema-tasks-archive-check | 扫描 active/ 中 Done/Cancelled 文件,更新 Changelog 并移入 archived/ |
| 每日早报 | 09:01 | kinema-tasks-daily-report | 读取最近快照 + 当前 active 生成 diff + 报告,推送到对话 |
| 写入快照 | 09:02 | kinema-tasks-write-snapshot | 扫描 active/ 生成快照写入 snapshots/YYYY-MM-DD.md |
三个 cron 使用
--session isolated+--channel+--to+--announce,配置步骤详见 ONBOARDING.md Step 2(确定推送通道)和 Step 4(创建 cron 任务)。 严格按顺序执行:归档检查 → 早报推送 → 写入快照
Helper Scripts | 辅助脚本
所有脚本位于 scripts/ 目录,通过 TASK_DIR 环境变量控制路径,默认 ~/.openclaw/workspace/kinema-tasks。
| 脚本 | 用途 |
|---|---|
next-id.sh | 获取下一个可用任务序号 |
create-task.sh | 创建任务文件(模板填充) |
archive-task.sh | 将任务移入 archived/ |
snapshot.sh | 生成并写入当日快照 |
report.sh | 生成每日报告(输出到 stdout) |
Domain Tags | 领域标签
| 领域 | 说明 |
|---|---|
| OpenClaw生态 | Skill 开发、生态调研、社区贡献 |
| 其他项目 | 非 OpenClaw 的技术项目 |
| 生活 | 非技术类事务 |
可自由扩展,创建任务时由用户指定或 Agent 提议。
Rules | 注意事项
- 禁止自动完成:未经确认不将任务标记为 Done 或 Cancelled
- 取消不可逆:Cancelled 执行前必须二次确认
- 文件原子性:状态变更和文件移动在同一操作中完成
- Changelog 只追加:不修改已有记录
- 序号不可复用:已使用序号永久保留
- 描述为纯文本:不做结构化拆分
- 快照只读:仅由 cron 写入
- Cron 顺序固定:归档 → 报告 → 快照