Install
openclaw skills install kinema-task-managementKinema personal task tracking system. AI Agent maintains tasks as markdown files in workspace. Trigger: User describes tasks, mentions "任务", "task", asks to create/update/archive/check tasks, uses `/mytask`, or receives task-related cron heartbeat.
openclaw skills install kinema-task-management首次使用此 skill 前,必须先读取 ONBOARDING.md 完成环境配置。
TASK_DIR=~/.openclaw/workspace/kinema-tasks
kinema-tasks/
├── active/ ← 活跃任务(Pending / In Progress / Snoozed)
├── archived/ ← 终结任务(Done / Cancelled)
└── snapshots/ ← 每日快照,按日期保存 YYYY-MM-DD.md
TASK-00001 → TASK-00002 → ...scripts/next-id.sh 获取下一个可用序号active/ 和 archived/ 共享同一序号空间每个任务一个独立 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 | 是 | 按时间正序追加,不修改已有记录 |
┌──────────┐
│ Pending │
└────┬─────┘
│ 开始执行
▼
┌──────────────┐ 完成(需用户确认)
│ In Progress │────────→ Done → archived/
└──────┬───────┘
│ 暂停
▼
┌──────────┐
│ Snoozed │
└──────────┘
任意状态 ──→ Cancelled(需用户确认)→ archived/
| 变更 | 触发方式 | 需要确认 |
|---|---|---|
| Pending → In Progress | 用户指令 | 否 |
| In Progress → Pending | 用户指令 | 否 |
| ↔ Snoozed | 用户指令 | 否 |
| → Done | Agent 主动或用户指令 | 是 |
| → Cancelled | 用户指令 | 是(二次确认) |
| Done / Cancelled | 状态变更后 | 自动移入 archived/ |
触发:用户描述新任务
流程:
scripts/create-task.sh 创建文件用户: "ClawHub publish 命令在遇到同名版本时报错没有清晰提示"
Agent: "收到,确认几个信息:
1. 优先级?urgent / normal / low
2. 属于哪个领域?OpenClaw生态 / 其他项目 / 生活
3. 截止日期?
4. 补充描述?还是就按你说的来?"
触发:用户明确指令
流程:
.md 文件scripts/archive-task.sh 移入 archived/用户: "TASK-00003 标记为 In Progress"
用户: "TASK-00001 的截止日期改到 4月20日"
触发:用户指令涉及多个任务
流程:
用户: "把所有 normal 的任务截止日期都推迟一天"
Agent: "以下任务将被修改:
- TASK-00002(截止 04/10 → 04/11)
- TASK-00005(截止 04/20 → 04/21)
确认执行?"
触发:用户明确说"取消"或"删除"某个任务
流程:
Cancelled,Changelog 追加记录,移入 archived/触发条件:
流程:
archived/北京时间 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 |
report.sh 生成结构化内容,由模型撰写 2-3 句摘要,组装完整报告并推送snapshot.sh 写入当日快照触发:用户输入 /mytask、询问"看看任务"、"任务列表"、"任务报告"等
active/ 和 archived/ 中所有任务文件
/mytask可直接触发手动查询,无需额外参数。
report.sh输出的是不含摘要的结构化部分(当前任务状况 + 昨日变动)。摘要由 Agent 模型根据report.sh的输出内容自行撰写。
对比最近一次快照与当前 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 todayNd overdue(不再追加 ⚠️)done核心规则:Snoozed 状态优先,即使过期也不出现在「EXPIRED」中。
# Snapshot — {YYYY-MM-DD}
> 生成时间:{YYYY-MM-DD} 09:00 BJT
## 任务列表
| 任务 | 标题 | 状态 | 优先级 | 领域 | 截止日期 |
|------|------|------|--------|------|---------|
| TASK-XXXXX | 标题 | 状态 | 优先级 | 领域 | 截止日期 |
## 摘要
共 N 个活跃任务 | N In Progress · N Pending · N Snoozed
快照文件由 cron 写入,不应手动修改。
| 任务 | 时间(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 任务)。 严格按顺序执行:归档检查 → 早报推送 → 写入快照
所有脚本位于 scripts/ 目录,通过 TASK_DIR 环境变量控制路径,默认 ~/.openclaw/workspace/kinema-tasks。
| 脚本 | 用途 |
|---|---|
next-id.sh | 获取下一个可用任务序号 |
create-task.sh | 创建任务文件(模板填充) |
archive-task.sh | 将任务移入 archived/ |
snapshot.sh | 生成并写入当日快照 |
report.sh | 生成每日报告(输出到 stdout) |
| 领域 | 说明 |
|---|---|
| OpenClaw生态 | Skill 开发、生态调研、社区贡献 |
| 其他项目 | 非 OpenClaw 的技术项目 |
| 生活 | 非技术类事务 |
可自由扩展,创建任务时由用户指定或 Agent 提议。