{"id":"ec3318bd-6640-4b71-8788-c3f00de9073f","entityType":"agent","slug":"clawhub-z-zihan-todo-list-promax","name":"Todo List Promax","canonicalUrl":"https://www.xpersona.co/agent/clawhub-z-zihan-todo-list-promax","canonicalPath":"/agent/clawhub-z-zihan-todo-list-promax","generatedAt":"2026-10-10T11:55:51.862Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T09:13:22.595Z","emptyReason":null},"description":"个人待办事项永久存储、智能分类与定时提醒系统。 自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。 当用户消息包含以下触发词时激活： 【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备... Skill: Todo List Promax Owner: z-zihan Summary: 个人待办事项永久存储、智能分类与定时提醒系统。 自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。 当用户消息包含以下触发词时激活： 【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备... Tags: latest:2.2.0 Version history: v2.2.0 | 2026-06-06T04:32:36.862Z | user Auto-publish from commit 4f6929ca2036b88853d5d77542c8355317ee9cac v2.1.0 | 2026-05-22T19:45:17.475Z | user Auto-publish from commit 5a","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.5K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17bsrqjkb5zv8sm90kdv3zawn83g42h:todo-list-promax","sourceUrl":"https://clawhub.ai/z-zihan/todo-list-promax","homepage":"https://clawhub.ai/z-zihan/skills/todo-list-promax","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/z-zihan/todo-list-promax","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/z-zihan/skills/todo-list-promax","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"个人待办事项永久存储、智能分类与定时提醒系统。 自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。 当用户消息包含以下触发词时激活： 【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T09:13:22.595Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T09:13:22.595Z","emptyReason":null},"stars":null,"forks":null,"downloads":1532,"packageName":null,"latestVersion":"2.2.0","tractionLabel":"1.5K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T09:13:22.595Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T09:13:22.595Z","lastCrawledAt":"2026-10-10T09:13:22.595Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T09:13:22.595Z","lastVerifiedAt":null,"highlights":[{"version":"2.2.0","createdAt":"2026-06-06T04:32:36.862Z","changelog":"Auto-publish from commit 4f6929ca2036b88853d5d77542c8355317ee9cac","fileCount":3,"zipByteSize":9553},{"version":"2.1.0","createdAt":"2026-05-22T19:45:17.475Z","changelog":"Auto-publish from commit 5a26728a72cecf9b77a29e2fcaccc5f02f344249","fileCount":3,"zipByteSize":9587},{"version":"2.0.2","createdAt":"2026-05-20T09:38:29.062Z","changelog":"Auto-publish from commit 1b23719dcc7fca2ec3f2b28f4ca0c983b40c8b95","fileCount":2,"zipByteSize":7403},{"version":"2.0.0","createdAt":"2026-05-18T12:48:18.150Z","changelog":"Auto-publish from commit dc4421fe7970ce27a9e172af29c59ab38d8373a3","fileCount":2,"zipByteSize":8137},{"version":"0.3.0","createdAt":"2026-05-18T08:11:24.464Z","changelog":"Auto-publish from commit 5b27ac4957173e2b02bfd6ba2b7bec399aaa54be","fileCount":2,"zipByteSize":8137},{"version":"1.3.1","createdAt":"2026-05-18T07:46:51.055Z","changelog":"No changes detected in this version. - Version bumped from 1.3.0 to 1.3.1, but no file or documentation changes were made. - No new features, bug fixes, or behavioral changes.","fileCount":2,"zipByteSize":8136},{"version":"1.3.0","createdAt":"2026-05-18T07:44:30.180Z","changelog":"Version 1.3.0 - 增加英文触发词支持，如 \"add todo\"、\"remind me to\"、\"don't forget\"、\"my todos\"、\"todo list\"、\"show todos\" 等，支持中英自然语言录入/查询。 - 查询指令增强：允许根据日期范围、具体日期、标签进行筛选（如 \"周一的 todo\"、\"bug 相关的待办\"）。 - 数据结构调整：`todos.json` schema 升级为 version 2，新增 `tags` 字段支持标签分类。 - 英文版说明文档与中文保持一致，所有主要功能均有双语指引。 - 操作命令兼容英文（如 \"done #1\"、\"delete #1\"、\"#1 change to tomorrow\"）。 - 保持向下兼容，首次读取自动平滑迁移 schema。","fileCount":2,"zipByteSize":8136},{"version":"0.1.110","createdAt":"2026-05-17T10:20:27.837Z","changelog":"Auto-publish from commit 0efa30a7609b20b5c22c38f17a672040ed31212f","fileCount":2,"zipByteSize":8137}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17bsrqjkb5zv8sm90kdv3zawn83g42h:todo-list-promax","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-z-zihan-todo-list-promax/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-z-zihan-todo-list-promax/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-z-zihan-todo-list-promax/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-z-zihan-todo-list-promax/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-z-zihan-todo-list-promax/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-z-zihan-todo-list-promax/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T11:55:51.856Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-z-zihan-todo-list-promax/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-z-zihan-todo-list-promax/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-z-zihan-todo-list-promax/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-z-zihan-todo-list-promax/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T09:13:22.595Z","emptyReason":null},"readme":"Skill: Todo List Promax\n\nOwner: z-zihan\n\nSummary: 个人待办事项永久存储、智能分类与定时提醒系统。 自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。 当用户消息包含以下触发词时激活： 【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备...\n\nTags: latest:2.2.0\n\nVersion history:\n\nv2.2.0 | 2026-06-06T04:32:36.862Z | user\n\nAuto-publish from commit 4f6929ca2036b88853d5d77542c8355317ee9cac\n\nv2.1.0 | 2026-05-22T19:45:17.475Z | user\n\nAuto-publish from commit 5a26728a72cecf9b77a29e2fcaccc5f02f344249\n\nv2.0.2 | 2026-05-20T09:38:29.062Z | user\n\nAuto-publish from commit 1b23719dcc7fca2ec3f2b28f4ca0c983b40c8b95\n\nv2.0.0 | 2026-05-18T12:48:18.150Z | user\n\nAuto-publish from commit dc4421fe7970ce27a9e172af29c59ab38d8373a3\n\nv0.3.0 | 2026-05-18T08:11:24.464Z | user\n\nAuto-publish from commit 5b27ac4957173e2b02bfd6ba2b7bec399aaa54be\n\nv1.3.1 | 2026-05-18T07:46:51.055Z | auto\n\nNo changes detected in this version.\n\n- Version bumped from 1.3.0 to 1.3.1, but no file or documentation changes were made.\n- No new features, bug fixes, or behavioral changes.\n\nv1.3.0 | 2026-05-18T07:44:30.180Z | auto\n\nVersion 1.3.0\n\n- 增加英文触发词支持，如 \"add todo\"、\"remind me to\"、\"don't forget\"、\"my todos\"、\"todo list\"、\"show todos\" 等，支持中英自然语言录入/查询。\n- 查询指令增强：允许根据日期范围、具体日期、标签进行筛选（如 \"周一的 todo\"、\"bug 相关的待办\"）。\n- 数据结构调整：`todos.json` schema 升级为 version 2，新增 `tags` 字段支持标签分类。\n- 英文版说明文档与中文保持一致，所有主要功能均有双语指引。\n- 操作命令兼容英文（如 \"done #1\"、\"delete #1\"、\"#1 change to tomorrow\"）。\n- 保持向下兼容，首次读取自动平滑迁移 schema。\n\nv0.1.110 | 2026-05-17T10:20:27.837Z | user\n\nAuto-publish from commit 0efa30a7609b20b5c22c38f17a672040ed31212f\n\nv1.2.0 | 2026-05-16T13:32:20.847Z | auto\n\ntodo-list-promax 1.2.0\n\n- 增强输入判定：仅动宾结构或明确动作触发待办录入，模糊/无效输入会追问确认，不再静默录入\n- 明确矛盾/批量/越界操作处理原则（如批量删除需逐条确认，越界请求会拒绝并提示）\n- 新增撤销机制：支持\"撤销\"/\"undo\"恢复最近一次操作\n- 日常提醒支持降级补推：定时任务失败时，用户下次交互自动补发提醒\n- 待办查询输出增加 P2 级别展示\n- 强化数据一致性与并发安全（原子写入、schema 升级兼容、附件延迟清理等）\n- English 文档同步完善上诉改动\n\nv1.1.0 | 2026-05-16T11:54:15.902Z | user\n\nBilingual restructure\n\nv0.1.99 | 2026-05-16T03:23:41.034Z | user\n\nAuto-publish from commit 926041209e8cad0642bea27605a45317279cea93\n\nv0.1.97 | 2026-05-16T03:04:16.335Z | user\n\nAuto-publish from commit e56b5a738adc7ed06037bbb3f22d56fd3cfa13d6\n\nArchive index:\n\nArchive v2.2.0: 3 files, 9553 bytes\n\nFiles: skill-card.md (2254b), SKILL.md (17437b), _meta.json (135b)\n\nFile v2.2.0:SKILL.md\n\n---\nname: todo-list-promax\nversion: \"2.2.0\"\ndescription: >\n  个人待办事项永久存储、智能分类与定时提醒系统。\n  自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。\n  当用户消息包含以下触发词时激活：\n  【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备忘\"、\"提醒我\"、\"add todo\"、\"remind me to\"、\"don't forget\"、\"note this\"\n  【查询】\"TODOLIST\"、\"待办列表\"、\"查看待办\"、\"看看待办\"、\"我有哪些待办\"、\"今天还有哪些未完成\"、\"还有什么没做\"、\"今天还要干嘛\"、\"今天的事做完了没\"、\"我的清单\"、\"my todos\"、\"todo list\"、\"what's pending\"、\"show todos\"\n  NOT for: 项目管理、日历集成、多人协作、自动执行任务。\n---\n\n# todo-list — 个人待办事项系统\n\n## 语言规则\n\n**检测用户使用的语言，全程使用同一语言输出。** 中文用户 → 读下方中文部分，全中文输出；English users → read the English section below, output in English only. 技术术语（JSON、ID 等）保留原文即可。\n\n---\n\n# 中文版\n\n## 目标\n\n为用户提供一个永久不丢失的待办事项管理系统。自动从聊天消息中捕获待办，智能解析时间和优先级，每日主动提醒未完成任务。\n\n## 核心原则\n\n1. **零摩擦录入** — 用户随意发一句话或一张图，系统自动识别并存储\n2. **永久不丢** — 完成 = 标记 done，不等于删除。已删除 = 真正移除\n3. **智能解析** — 从自然语言自动提取时间、优先级、任务内容\n4. **主动提醒** — 有截止时间的未完成任务，每天 21:00 主动推送\n5. **按需响应** — 用户不问不回复，避免打扰\n\n## 主要职责\n\n### 1. 待办录入\n\n**触发词：** `TODO:`、`帮我记录一下`、`记录：`、`待办：`、`加个待办`、`记一下`、`别忘了`、`记得提醒我`、`回头要做`、`备忘`、`提醒我`、`add todo`、`remind me to`、`don't forget`、`note this`\n\n**模糊输入判定规则：** 消息必须包含**动宾结构**或**明确动作词**才能触发录入。判断标准：\n- ✅ 触发：含动词+宾语（\"完成课程作业\"、\"买充电线\"、\"看完论文\"）\n- ✅ 触发：含明确动作+目标（\"TODO: 复习期末考试\"）\n- ❌ 不触发：纯状态/意向陈述（\"我打算吃饭\"、\"最近好累\"、\"想学 Rust\"）\n- ❓ 模糊时：**追问而非静默录入**。如\"TODO: 搞一下那个东西\" → 回复\"你想记录什么待办？请具体说明一下任务内容\"\n\n**操作优先级**：如果同一条消息同时匹配录入和操作指令（如\"删除这个 TODO: xxx\"），优先执行操作指令（完成 > 删除 > 修改 > 录入），不创建重复待办。\n\n**矛盾请求处理**：当用户消息包含矛盾指令时（如\"完成了 #1 删除 #1\"或\"TODO: 删除所有待办\"）：\n- 操作间矛盾：按优先级执行第一个操作，忽略矛盾的第二个，并告知用户\n- 批量操作（\"删除所有\"/\"完成全部\"）：列出受影响的项目，逐条确认，不可批量静默执行\n- 越界请求（\"帮我把待办同步到飞书项目\"）：拒绝并提示\"todo-list 仅管理本地待办，不支持外部同步\"\n\n**流程：**\n1. 从用户消息中提取任务内容\n2. 如果消息包含图片/附件，下载并保存到 `${workspace}/todo-list/attachments/`\n3. 解析时间要求（如有）\n4. 解析优先级（如有）\n5. **提取对接人（contact）**（见下方对接人提取规则）\n6. **提取备注（notes）**（见下方备注提取规则）\n7. **提取标签（tags）**（见下方标签提取规则）\n8. 生成唯一 ID，写入 `${workspace}/todo-list/todos.json`\n9. 回复用户确认（完整一行：ID + 摘要 + 优先级 + 截止时间 + 对接人 + 标签 + 备注摘要）\n\n**时间解析：**\n- 相对时间：今天、明天、后天、下周一、本周五、今晚、月底 等\n- 绝对时间：5月20日、5-20、2026/5/20 等\n- 模糊时间：尽快、ASAP、有空时 → 不设截止时间\n- 精确到\"天\"，不支持具体小时\n- 无法解析时 → 不设截止时间，不追问\n\n**优先级解析：**\n\n| 级别 | 标记方式 | 自然语言线索 |\n|------|---------|-------------|\n| P0 | `[P0]`、`⚠️` | \"很紧急\"、\"立刻\"、\"马上\"、\"必须今天\" |\n| P1 | `[P1]` 或不标 | \"重要\"、\"要做\"（默认） |\n| P2 | `[P2]`、`⚡` | \"急但不重要\"、\"顺手做\" |\n| P3 | `[P3]`、`📌` | \"有空再说\"、\"随手记一下\"、\"不急\" |\n\n无法判断时默认 P1。\n\n**对接人（contact）提取规则：**\n\n从用户消息中识别对接人/负责人信息，提取到 `contact` 字段：\n\n| 模式 | 示例 | 提取结果 |\n|------|------|---------|\n| \"XX：\" 前缀 | \"小李：输入框跟后台配置联动\" | contact: \"小李\" |\n| \"@XXX\" | \"@小王 翻译完了发过来\" | contact: \"小王\" |\n| \"对接人：XX\" | \"适配 autoclaw，对接人小陈\" | contact: \"小陈\" |\n| \"找XX\" / \"跟XX对接\" | \"找小陈对接多语言\" | contact: \"小陈\" |\n| \"XX给XX后\" | \"小王给翻译文本后加到项目\" | contact: \"小王\" |\n\n提取原则：\n- 如果消息中提及多处人名，提取最直接负责该任务的人\n- 无法确定时 `contact` 为空，不追问\n- **查询输出时**：有 contact → 显示 `👤 对接:XXX`；无 contact → 不显示\n\n**备注（notes）提取规则：**\n\n- **仅当用户明确提供备注信息时才记录**，如\"备注：XX\"、\"注意：XX\"\n- **禁止自动脑补备注**：不要从 content 中推断、不要自行总结、不要把原文复述一遍\n- 飞书文档链接等用户主动发送的参考资料可归入 notes\n- `notes` 为空时不显示\n\n**标签（tags）提取规则：**\n\n默认标签集：`工作`、`学习`、`购物`、`生活`、`健康`、`其他`\n\n提取方式：\n1. **手动指定**：用户使用 `#标签名` 语法，如 `TODO: 完成报告 #工作` → tags: [\"工作\"]\n2. **关键词映射**：从消息内容中识别名词类别关键词，自动映射到默认标签：\n\n| 关键词示例 | 映射标签 |\n|-----------|---------|\n| 作业、报告、会议、邮件、项目、汇报、答辩、上线 | 工作 |\n| 论文、看书、课程、考试、练习、学习、培训、作业 | 学习 |\n| 买、购物、下单、充值、充电线、耳机 | 购物 |\n| 打扫、做饭、取快递、缴费、搬家、洗衣服 | 生活 |\n| 体检、运动、吃药、跑步、挂号、看医生 | 健康 |\n\n3. **无匹配**：当消息中没有可识别的类别关键词且用户未手动指定标签时，tags 为空数组 `[]`\n4. **多标签**：一条待办可以有多个标签，如 `TODO: 买体检套餐 #健康 #购物` → tags: [\"健康\", \"购物\"]\n5. **自定义标签**：用户可以使用 `#标签名` 指定不在默认集中的标签，如 `TODO: 修复 bug #前端` → tags: [\"前端\"]\n\n**附件处理：**\n- 图片/文件：下载到 `${workspace}/todo-list/attachments/{todoId}_{原文件名}`\n- json 中记录 `attachments: [{path, type}]`，type 枚举：`image`（图片）、`file`（其他文件）\n- 同时有文字和图片时，两者都存储\n\n**附件清理机制：**\n- 每次操作 `todos.json` 时（录入、完成、删除、修改等），检查 `attachments/` 目录中是否存在已删除 todo 的附件\n- 如果该附件关联的 todo 已被删除**超过 7 天**（根据 todo 的删除时间戳判断），则自动清理该附件文件\n- 清理日志追加到 `${workspace}/todo-list/cleanup.log`\n\n### 2. 待办查询\n\n**触发词：** `TODOLIST`、`待办列表`、`查看待办`、`看看待办`、`我有哪些待办`、`今天还有哪些未完成`、`还有什么没做`、`今天还要干嘛`、`今天的事做完了没`、`我的清单`、`my todos`、`todo list`、`what's pending`、`show todos`\n\n**查询模式：**\n- 无条件 → 所有未完成待办，按截止时间升序（无截止排最后），同截止时间再按优先级排序（P0 > P1 > P2 > P3）\n- 按日期 → \"周一的 todo\"、\"5月18日的待办\"、\"今天的\" → 筛选 `due_time` 匹配该日期的未完成项\n- 按时间范围 → \"本周\"、\"本月\" → 筛选 `due_time` 在范围内\n- 按优先级 → \"有哪些紧急的\" → 筛选特定级别\n- 按标签 → \"工作相关的待办\" → 筛选 `tags` 包含对应标签\n\n**输出格式：** 表格，内容列在最前，无 emoji，备注仅用户明确提供时显示。\n\n```\n| 内容 | # | P | 截止 | 对接人 | 备注 |\n|---|:---:|:---:|:---:|---|---|\n| 完成课程作业（附实验报告） | 1 | P0 | 今天 | 小李 | |\n| 看完那篇论文 | 3 | P1 | 下周一 | | |\n| 取快递 | 5 | P1 | | | |\n```\n\n**格式说明：**\n- **内容列置首**，最重要信息优先\n- 不使用 emoji（不要 🔴🟡🟠🟢），用 P 列直显优先级\n- 备注/对接人为空时不显示（留空即可）\n- 截止时间简洁显示：今天/明天/5/25，已过期标红\n- 不显示 source_message（内容列已涵盖）\n\n### 3. 待办操作\n\n**完成：** \"完成了 #1\" 或 \"TODO 完成 1\" 或 \"done #1\" → 标记 `status: done`，记录 `completed_at`\n**删除：** \"删除 #1\" 或 \"TODO 删除 1\" 或 \"delete #1\" → 回复待删除的 todo 内容摘要（ID + 内容 + 优先级），等用户确认后再移除。用户说\"确认\"或\"删\"时才执行\n**修改：** \"#1 改成明天\" 或 \"#1 change to tomorrow\" → 更新对应字段，回复确认\n\n**可修改字段：** `content`（内容）、`due_time`（截止时间）、`priority`（优先级）、`contact`（对接人）、`notes`（备注）、`tags`（标签）\n\n**修改语法：**\n- 字段名语法：`#N due_time:明天`、`#N priority:P0`、`#N content:新的任务描述`、`#N contact:小李`、`#N notes:补充信息`、`#N tags:学习,生活`\n- 自然语言语法（同样支持）：`#1 截止:明天`、`#1 优先级:P0`、`#1 内容:新的任务描述`、`#1 对接人:小李`、`#1 备注:补充信息`\n- 两种写法等价，系统都能识别\n\n**撤销机制：**\n- 用户说\"撤销\"或\"undo\"时，恢复到 `todos.json.bak` 中的上一版本\n- **仅支持单步 undo**：连续两次 undo 时，第二次 undo 恢复到 bak 之前的版本（即 bak 文件中存储的状态，不会继续回退到更早版本）\n- **undo 后的新操作**：undo 之后再执行任何新操作（录入/完成/删除/修改），新操作会覆盖 `todos.json.bak`，之前的 undo 状态不可再恢复\n- 简言之：永远只能撤销最近一次操作，undo 不是无限回退栈\n\n### 4. 每日提醒\n\n- **时间：** 每天 21:00\n- **配置方式（具体步骤）：**\n\n  使用 OpenClaw cron 创建每日提醒任务，最小步骤如下：\n\n  1. 创建 cron 任务，调度规则为 `0 21 * * *`（每天 21:00）\n  2. cron 任务触发时执行以下流程：\n     a. 读取 `${workspace}/todo-list/todos.json`\n     b. 筛选条件：`status != \"done\"` 且 `due_time != null`\n     c. 按截止时间升序排序（无截止排最后），同截止时间再按优先级排序（P0 > P1 > P2 > P3）\n     d. 如有匹配项，生成紧凑列表消息并推送到用户聊天\n     e. 如无匹配项，不推送\n     f. 更新 `last_reminder_at` 为当前时间\n  3. 推送消息末尾附操作指引：`回复\"完成 #N\"标记完成 · 回复\"TODOLIST\"查看全部 · 回复\"#N due_time:X\"修改 · 回复\"撤销\"恢复最近操作`\n  4. cron 命令示例：`openclaw cron add --schedule \"0 21 * * *\" --task \"Read todos.json, filter pending items with due_time, push reminder if any\"`\n\n- **降级策略：** cron 不可用或执行失败时，在下次用户交互时补充推送未提醒项（检查 `last_reminder_at`，若超过 24 小时则补推）\n\n## 数据结构\n\n存储文件：`${workspace}/todo-list/todos.json`（`workspace` 为当前 OpenClaw 工作目录）\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"完成课程作业\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"contact\": \"小李\",\n      \"notes\": \"需要附上实验报告\",\n      \"tags\": [\"学习\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"deleted_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:今天下班前完成课程作业，对接人小李，需要附上实验报告\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\n字段说明：\n- `id`: 自增整数，不重复使用\n- `content`: 任务内容（纯文本摘要）\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: 截止日期 YYYY-MM-DD，可为 null\n- `contact`: 对接人/负责人姓名（可选，无则为空字符串 `\"\"`）\n- `notes`: 备注信息，含补充说明、参考链接等（可选，无则为空字符串 `\"\"`）\n- `tags`: 标签数组，用于分类和筛选（如 `[\"工作\", \"bug\"]`），可为空数组\n- `created_at`: 创建时间 ISO 8601\n- `completed_at`: 完成时间 ISO 8601，完成时填入\n- `deleted_at`: 删除时间 ISO 8601，删除时填入（用于附件 7 天清理判断）\n- `attachments`: `[{path, type}]` 附件列表\n- `source_message`: 原始消息内容（完整保留，永不修改）\n- `last_reminder_at`: 上次提醒时间 ISO 8601（用于降级补推）\n\n## 并发安全\n\n写入 todos.json 时采用原子写模式：先写入临时文件 `todos.json.tmp`，写入成功后 `mv`（rename）替换原文件。避免两个 session 同时写导致数据丢失。\n\n## 约束\n\n- 存储路径：`${workspace}/todo-list/`（相对于当前工作目录）\n- 附件路径：`${workspace}/todo-list/attachments/`\n- ID 自增，已删除的 ID 不重复使用\n- 不修改用户消息原文\n- 删除操作必须二次确认\n- 时间解析精确到天\n- `todos.json` 或目录不存在时自动创建\n- 写入 json 前自动备份上一版本到 `todos.json.bak`\n- 读取 json 解析失败时，尝试使用 `todos.json.bak` 恢复\n- 删除 todo 后，记录 `deleted_at` 时间戳，attachments 目录中的文件**保留 7 天**后自动清理（避免误删后无法恢复）\n- 每次操作 todos.json 时检查是否有超过 7 天的已删除 todo 附件，有则清理\n- Schema 升级：读取时检查 `version` 字段，若不匹配当前版本，执行迁移（如新增字段填默认值）并写回\n\n---\n---\n\n# English Version\n\n> **This skill is written in Chinese.** For full details, please read the Chinese section above.\n> You can ask AI to translate the Chinese section if needed.\n\n## Summary\n\n**todo-list-promax** — Personal todo management system with permanent storage, smart categorization, and daily reminders.\n\n### Core Principles\n1. **Zero-friction input** — Auto-capture from casual messages or images\n2. **Permanent storage** — Done ≠ delete; deleted = actually removed\n3. **Smart parsing** — Auto-extract time, priority, tags from natural language\n4. **Daily reminders** — Push unfinished tasks at 21:00 via cron\n5. **On-demand** — Don't disturb unless asked\n\n### Key Features\n\n| Feature | Details |\n|---------|---------|\n| Capture | Triggers: `TODO:`, `add todo`, `remind me to`, etc. Fuzzy input → ask, don't silently capture |\n| Query | Triggers: `TODOLIST`, `my todos`, etc. Filter by date/range/priority/tags. Shows 👤contact, 📝notes, 💬source_message for every item |\n| Operations | Complete, delete (with confirmation), modify, undo (single-step only) |\n| Tags | Auto-extract via keyword mapping (工作/学习/购物/生活/健康/其他) or manual `#tag` syntax. Default: empty array |\n| Daily reminder | Cron at 21:00: read todos.json → filter pending with due_time → push if any. Fallback: push on next interaction if >24h since last reminder |\n| Attachments | Saved to `attachments/`, auto-cleaned 7 days after todo deletion |\n\n### Modify Syntax\n- Field name syntax: `#1 due_time:明天`, `#1 priority:P0`, `#1 content:新内容`, `#1 contact:小李`, `#1 notes:补充说明`, `#1 tags:学习,生活`\n- Natural language also supported: `#1 截止:明天`, `#1 优先级:P0`, `#1 内容:新内容`, `#1 对接人:小李`\n- Both are equivalent\n\n### Undo Specification\n- Single-step only: second consecutive undo restores to the bak version (no further rollback)\n- After undo, any new operation overwrites bak — previous undo state is lost\n- In short: always only the most recent operation can be undone\n\n### Data Schema\n```json\n{\n  \"id\": 1, \"content\": \"...\", \"status\": \"pending|done\",\n  \"priority\": \"P0|P1|P2|P3\", \"due_time\": \"YYYY-MM-DD|null\",\n  \"contact\": \"string (optional)\", \"notes\": \"string (optional)\",\n  \"tags\": [], \"created_at\": \"ISO8601\", \"completed_at\": null,\n  \"deleted_at\": null, \"attachments\": [{\"path\":\"\",\"type\":\"image|file\"}],\n  \"source_message\": \"...\"\n}\n```\n\n### Cron Setup (Minimal Steps)\n1. Create cron: `0 21 * * *`\n2. On trigger: read `todos.json` → filter `status != \"done\"` AND `due_time != null` → sort by due_time ascending, then by priority → push if any → update `last_reminder_at`\n3. Append action guide to push message\n\n### Constraints\n- Atomic writes (write to `.tmp` then `mv`)\n- Auto-backup to `todos.json.bak` before writes\n- Auto-recover from `.bak` on parse failure\n- Deleted todo attachments retained 7 days then auto-cleaned\n- Schema migration on version mismatch\n\nFile v2.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn76af6ccjftr7hsds21j60xnn82q1qd\",\n  \"slug\": \"todo-list-promax\",\n  \"version\": \"2.2.0\",\n  \"publishedAt\": 1780720356862\n}\n\nFile v2.2.0:skill-card.md\n\n## Description:\n\nTodo List Promax gives an agent instructions for a persistent personal todo manager that captures tasks from chat text, images, and attachments, categorizes them, and sends daily reminders.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[z-zihan](https://clawhub.ai/user/z-zihan)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users use this skill to let an agent maintain a local personal todo list, including task capture, query, completion, deletion, modification, attachment tracking, and daily reminder setup.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can retain full original user messages, which may include private, business, customer, or credential-like information.\n\nMitigation: Review before installation and change the skill to avoid storing raw original messages by default, with clear retention and deletion controls.\n\nRisk: Contradictory instructions can expose raw source messages during normal todo queries.\n\nMitigation: Remove source_message from normal output and suppress or redact raw message fields in query responses.\n\nRisk: Stored attachments and backups can preserve sensitive todo context after normal task operations.\n\nMitigation: Add explicit controls for reminders, deletion, retention, and purging backups and attachments.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/z-zihan/skills/todo-list-promax)\n- [Publisher profile](https://clawhub.ai/user/z-zihan)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, json, shell commands, configuration, guidance]\n\n**Output Format:** [Natural-language responses, Markdown tables, JSON todo records, and shell command snippets]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May create or update local todo-list files, attachments, backups, cleanup logs, and daily reminder configuration.]\n\n## Skill Version(s):\n\n2.2.0 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.1.0: 3 files, 9587 bytes\n\nFiles: skill-card.md (2008b), SKILL.md (18122b), _meta.json (135b)\n\nFile v2.1.0:SKILL.md\n\n---\nname: todo-list-promax\nversion: \"2.1.0\"\ndescription: >\n  个人待办事项永久存储、智能分类与定时提醒系统。\n  自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。\n  当用户消息包含以下触发词时激活：\n  【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备忘\"、\"提醒我\"、\"add todo\"、\"remind me to\"、\"don't forget\"、\"note this\"\n  【查询】\"TODOLIST\"、\"待办列表\"、\"查看待办\"、\"看看待办\"、\"我有哪些待办\"、\"今天还有哪些未完成\"、\"还有什么没做\"、\"今天还要干嘛\"、\"今天的事做完了没\"、\"我的清单\"、\"my todos\"、\"todo list\"、\"what's pending\"、\"show todos\"\n  NOT for: 项目管理、日历集成、多人协作、自动执行任务。\n---\n\n# todo-list — 个人待办事项系统\n\n## 语言规则\n\n**检测用户使用的语言，全程使用同一语言输出。** 中文用户 → 读下方中文部分，全中文输出；English users → read the English section below, output in English only. 技术术语（JSON、ID 等）保留原文即可。\n\n---\n\n# 中文版\n\n## 目标\n\n为用户提供一个永久不丢失的待办事项管理系统。自动从聊天消息中捕获待办，智能解析时间和优先级，每日主动提醒未完成任务。\n\n## 核心原则\n\n1. **零摩擦录入** — 用户随意发一句话或一张图，系统自动识别并存储\n2. **永久不丢** — 完成 = 标记 done，不等于删除。已删除 = 真正移除\n3. **智能解析** — 从自然语言自动提取时间、优先级、任务内容\n4. **主动提醒** — 有截止时间的未完成任务，每天 21:00 主动推送\n5. **按需响应** — 用户不问不回复，避免打扰\n\n## 主要职责\n\n### 1. 待办录入\n\n**触发词：** `TODO:`、`帮我记录一下`、`记录：`、`待办：`、`加个待办`、`记一下`、`别忘了`、`记得提醒我`、`回头要做`、`备忘`、`提醒我`、`add todo`、`remind me to`、`don't forget`、`note this`\n\n**模糊输入判定规则：** 消息必须包含**动宾结构**或**明确动作词**才能触发录入。判断标准：\n- ✅ 触发：含动词+宾语（\"提交周报\"、\"买充电线\"、\"看完论文\"）\n- ✅ 触发：含明确动作+目标（\"TODO: 部署测试环境\"）\n- ❌ 不触发：纯状态/意向陈述（\"我打算吃饭\"、\"最近好累\"、\"想学 Rust\"）\n- ❓ 模糊时：**追问而非静默录入**。如\"TODO: 搞一下那个东西\" → 回复\"你想记录什么待办？请具体说明一下任务内容\"\n\n**操作优先级**：如果同一条消息同时匹配录入和操作指令（如\"删除这个 TODO: xxx\"），优先执行操作指令（完成 > 删除 > 修改 > 录入），不创建重复待办。\n\n**矛盾请求处理**：当用户消息包含矛盾指令时（如\"完成了 #1 删除 #1\"或\"TODO: 删除所有待办\"）：\n- 操作间矛盾：按优先级执行第一个操作，忽略矛盾的第二个，并告知用户\n- 批量操作（\"删除所有\"/\"完成全部\"）：列出受影响的项目，逐条确认，不可批量静默执行\n- 越界请求（\"帮我把待办同步到飞书项目\"）：拒绝并提示\"todo-list 仅管理本地待办，不支持外部同步\"\n\n**流程：**\n1. 从用户消息中提取任务内容\n2. 如果消息包含图片/附件，下载并保存到 `${workspace}/todo-list/attachments/`\n3. 解析时间要求（如有）\n4. 解析优先级（如有）\n5. **提取对接人（contact）**（见下方对接人提取规则）\n6. **提取备注（notes）**（见下方备注提取规则）\n7. **提取标签（tags）**（见下方标签提取规则）\n8. 生成唯一 ID，写入 `${workspace}/todo-list/todos.json`\n9. 回复用户确认（完整一行：ID + 摘要 + 优先级 + 截止时间 + 对接人 + 标签 + 备注摘要）\n\n**时间解析：**\n- 相对时间：今天、明天、后天、下周一、本周五、今晚、月底 等\n- 绝对时间：5月20日、5-20、2026/5/20 等\n- 模糊时间：尽快、ASAP、有空时 → 不设截止时间\n- 精确到\"天\"，不支持具体小时\n- 无法解析时 → 不设截止时间，不追问\n\n**优先级解析：**\n\n| 级别 | 标记方式 | 自然语言线索 |\n|------|---------|-------------|\n| P0 | `[P0]`、`⚠️` | \"很紧急\"、\"立刻\"、\"马上\"、\"必须今天\" |\n| P1 | `[P1]` 或不标 | \"重要\"、\"要做\"（默认） |\n| P2 | `[P2]`、`⚡` | \"急但不重要\"、\"顺手做\" |\n| P3 | `[P3]`、`📌` | \"有空再说\"、\"随手记一下\"、\"不急\" |\n\n无法判断时默认 P1。\n\n**对接人（contact）提取规则：**\n\n从用户消息中识别对接人/负责人信息，提取到 `contact` 字段：\n\n| 模式 | 示例 | 提取结果 |\n|------|------|---------|\n| \"XX：\" 前缀 | \"覃波：输入框跟后台配置联动\" | contact: \"覃波\" |\n| \"@XXX\" | \"@薛柯 翻译完了发过来\" | contact: \"薛柯\" |\n| \"对接人：XX\" | \"适配 autoclaw，对接人郭雨竹\" | contact: \"郭雨竹\" |\n| \"找XX\" / \"跟XX对接\" | \"找郭雨竹对接多语言\" | contact: \"郭雨竹\" |\n| \"XX给XX后\" | \"薛柯给翻译文本后加到项目\" | contact: \"薛柯\" |\n\n提取原则：\n- 如果消息中提及多处人名，提取最直接负责该任务的人\n- 无法确定时 `contact` 为空，不追问\n- **查询输出时**：有 contact → 显示 `👤 对接:XXX`；无 contact → 不显示\n\n**备注（notes）提取规则：**\n\n- 当用户在任务描述中附带额外说明（如\"备注：XX\"、\"PS：XX\"、\"注意：XX\"），提取到 `notes` 字段\n- 当用户使用括号补充关键信息（如\"预装插件会不会重新安装（什么变了才会重新安装）\"），括号内容自动提取为 notes\n- 飞书文档链接等参考资料自动归入 notes\n- `notes` 为可选字段，无额外信息时为空\n- **查询输出时**：有 notes → 显示 `📝 备注:XXX`；无 notes → 不显示\n- **查询输出时**：始终显示 `💬 原文: source_message`，保留完整原始信息\n\n**标签（tags）提取规则：**\n\n默认标签集：`工作`、`学习`、`购物`、`生活`、`健康`、`其他`\n\n提取方式：\n1. **手动指定**：用户使用 `#标签名` 语法，如 `TODO: 完成报告 #工作` → tags: [\"工作\"]\n2. **关键词映射**：从消息内容中识别名词类别关键词，自动映射到默认标签：\n\n| 关键词示例 | 映射标签 |\n|-----------|---------|\n| 周报、报告、会议、邮件、项目、汇报、评审、上线 | 工作 |\n| 论文、看书、课程、考试、练习、学习、培训 | 学习 |\n| 买、购物、下单、充值、充电线、耳机 | 购物 |\n| 打扫、做饭、取快递、缴费、搬家、洗衣服 | 生活 |\n| 体检、运动、吃药、跑步、挂号、看医生 | 健康 |\n\n3. **无匹配**：当消息中没有可识别的类别关键词且用户未手动指定标签时，tags 为空数组 `[]`\n4. **多标签**：一条待办可以有多个标签，如 `TODO: 买体检套餐 #健康 #购物` → tags: [\"健康\", \"购物\"]\n5. **自定义标签**：用户可以使用 `#标签名` 指定不在默认集中的标签，如 `TODO: 修复 bug #前端` → tags: [\"前端\"]\n\n**附件处理：**\n- 图片/文件：下载到 `${workspace}/todo-list/attachments/{todoId}_{原文件名}`\n- json 中记录 `attachments: [{path, type}]`，type 枚举：`image`（图片）、`file`（其他文件）\n- 同时有文字和图片时，两者都存储\n\n**附件清理机制：**\n- 每次操作 `todos.json` 时（录入、完成、删除、修改等），检查 `attachments/` 目录中是否存在已删除 todo 的附件\n- 如果该附件关联的 todo 已被删除**超过 7 天**（根据 todo 的删除时间戳判断），则自动清理该附件文件\n- 清理日志追加到 `${workspace}/todo-list/cleanup.log`\n\n### 2. 待办查询\n\n**触发词：** `TODOLIST`、`待办列表`、`查看待办`、`看看待办`、`我有哪些待办`、`今天还有哪些未完成`、`还有什么没做`、`今天还要干嘛`、`今天的事做完了没`、`我的清单`、`my todos`、`todo list`、`what's pending`、`show todos`\n\n**查询模式：**\n- 无条件 → 所有未完成待办，按截止时间升序（无截止排最后），同截止时间再按优先级排序（P0 > P1 > P2 > P3）\n- 按日期 → \"周一的 todo\"、\"5月18日的待办\"、\"今天的\" → 筛选 `due_time` 匹配该日期的未完成项\n- 按时间范围 → \"本周\"、\"本月\" → 筛选 `due_time` 在范围内\n- 按优先级 → \"有哪些紧急的\" → 筛选特定级别\n- 按标签 → \"工作相关的待办\" → 筛选 `tags` 包含对应标签\n\n**输出格式：**\n```\n📋 未完成待办（共 X 条）\n\n🔴 P0 重要紧急\n  #1 今天下班前提交周报  📅 今天  👤 对接:张三  🏷 工作\n  📝 备注:需要附上数据报表\n  💬 原文: TODO:今天下班前提交周报，对接人张三，需要附上数据报表\n\n🟡 P1 重要不紧急\n  #3 看完那篇论文  📅 下周一  🏷 学习\n  💬 原文: TODO:看完那篇论文 #学习\n\n  #5 整理桌面  （无截止时间）  🏷 生活\n  💬 原文: 待办：整理桌面\n\n🟠 P2 急但不重要\n  #8 回复那个邮件  📅 明天  👤 对接:李四  🏷 工作\n  💬 原文: reminder: 回复李四那封邮件明天前\n\n🟢 P3 不急\n  #7 买个充电线  📅 有空再说  🏷 购物\n  💬 原文: 备忘：买个充电线\n```\n\n**格式说明：**\n- 每个待办第一行：emoji + **#ID** + content + 📅（截止时间）+ 👤（对接人，有则显示）+ 🏷（标签，有则显示）\n- 有 notes 时：第二行 `📝 备注:内容`\n- 始终显示：`💬 原文: source_message`（保留原始关键信息，永不省略）\n\n### 3. 待办操作\n\n**完成：** \"完成了 #1\" 或 \"TODO 完成 1\" 或 \"done #1\" → 标记 `status: done`，记录 `completed_at`\n**删除：** \"删除 #1\" 或 \"TODO 删除 1\" 或 \"delete #1\" → 回复待删除的 todo 内容摘要（ID + 内容 + 优先级），等用户确认后再移除。用户说\"确认\"或\"删\"时才执行\n**修改：** \"#1 改成明天\" 或 \"#1 change to tomorrow\" → 更新对应字段，回复确认\n\n**可修改字段：** `content`（内容）、`due_time`（截止时间）、`priority`（优先级）、`contact`（对接人）、`notes`（备注）、`tags`（标签）\n\n**修改语法：**\n- 字段名语法：`#N due_time:明天`、`#N priority:P0`、`#N content:新的任务描述`、`#N contact:张三`、`#N notes:补充信息`、`#N tags:工作,学习`\n- 自然语言语法（同样支持）：`#1 截止:明天`、`#1 优先级:P0`、`#1 内容:新的任务描述`、`#1 对接人:张三`、`#1 备注:补充信息`\n- 两种写法等价，系统都能识别\n\n**撤销机制：**\n- 用户说\"撤销\"或\"undo\"时，恢复到 `todos.json.bak` 中的上一版本\n- **仅支持单步 undo**：连续两次 undo 时，第二次 undo 恢复到 bak 之前的版本（即 bak 文件中存储的状态，不会继续回退到更早版本）\n- **undo 后的新操作**：undo 之后再执行任何新操作（录入/完成/删除/修改），新操作会覆盖 `todos.json.bak`，之前的 undo 状态不可再恢复\n- 简言之：永远只能撤销最近一次操作，undo 不是无限回退栈\n\n### 4. 每日提醒\n\n- **时间：** 每天 21:00\n- **配置方式（具体步骤）：**\n\n  使用 OpenClaw cron 创建每日提醒任务，最小步骤如下：\n\n  1. 创建 cron 任务，调度规则为 `0 21 * * *`（每天 21:00）\n  2. cron 任务触发时执行以下流程：\n     a. 读取 `${workspace}/todo-list/todos.json`\n     b. 筛选条件：`status != \"done\"` 且 `due_time != null`\n     c. 按截止时间升序排序（无截止排最后），同截止时间再按优先级排序（P0 > P1 > P2 > P3）\n     d. 如有匹配项，生成紧凑列表消息并推送到用户聊天\n     e. 如无匹配项，不推送\n     f. 更新 `last_reminder_at` 为当前时间\n  3. 推送消息末尾附操作指引：`回复\"完成 #N\"标记完成 · 回复\"TODOLIST\"查看全部 · 回复\"#N due_time:X\"修改 · 回复\"撤销\"恢复最近操作`\n  4. cron 命令示例：`openclaw cron add --schedule \"0 21 * * *\" --task \"Read todos.json, filter pending items with due_time, push reminder if any\"`\n\n- **降级策略：** cron 不可用或执行失败时，在下次用户交互时补充推送未提醒项（检查 `last_reminder_at`，若超过 24 小时则补推）\n\n## 数据结构\n\n存储文件：`${workspace}/todo-list/todos.json`（`workspace` 为当前 OpenClaw 工作目录）\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"提交周报\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"contact\": \"张三\",\n      \"notes\": \"需要附上数据报表\",\n      \"tags\": [\"工作\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"deleted_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:今天下班前提交周报，对接人张三，需要附上数据报表\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\n字段说明：\n- `id`: 自增整数，不重复使用\n- `content`: 任务内容（纯文本摘要）\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: 截止日期 YYYY-MM-DD，可为 null\n- `contact`: 对接人/负责人姓名（可选，无则为空字符串 `\"\"`）\n- `notes`: 备注信息，含补充说明、参考链接等（可选，无则为空字符串 `\"\"`）\n- `tags`: 标签数组，用于分类和筛选（如 `[\"工作\", \"bug\"]`），可为空数组\n- `created_at`: 创建时间 ISO 8601\n- `completed_at`: 完成时间 ISO 8601，完成时填入\n- `deleted_at`: 删除时间 ISO 8601，删除时填入（用于附件 7 天清理判断）\n- `attachments`: `[{path, type}]` 附件列表\n- `source_message`: 原始消息内容（完整保留，永不修改）\n- `last_reminder_at`: 上次提醒时间 ISO 8601（用于降级补推）\n\n## 并发安全\n\n写入 todos.json 时采用原子写模式：先写入临时文件 `todos.json.tmp`，写入成功后 `mv`（rename）替换原文件。避免两个 session 同时写导致数据丢失。\n\n## 约束\n\n- 存储路径：`${workspace}/todo-list/`（相对于当前工作目录）\n- 附件路径：`${workspace}/todo-list/attachments/`\n- ID 自增，已删除的 ID 不重复使用\n- 不修改用户消息原文\n- 删除操作必须二次确认\n- 时间解析精确到天\n- `todos.json` 或目录不存在时自动创建\n- 写入 json 前自动备份上一版本到 `todos.json.bak`\n- 读取 json 解析失败时，尝试使用 `todos.json.bak` 恢复\n- 删除 todo 后，记录 `deleted_at` 时间戳，attachments 目录中的文件**保留 7 天**后自动清理（避免误删后无法恢复）\n- 每次操作 todos.json 时检查是否有超过 7 天的已删除 todo 附件，有则清理\n- Schema 升级：读取时检查 `version` 字段，若不匹配当前版本，执行迁移（如新增字段填默认值）并写回\n\n---\n---\n\n# English Version\n\n> **This skill is written in Chinese.** For full details, please read the Chinese section above.\n> You can ask AI to translate the Chinese section if needed.\n\n## Summary\n\n**todo-list-promax** — Personal todo management system with permanent storage, smart categorization, and daily reminders.\n\n### Core Principles\n1. **Zero-friction input** — Auto-capture from casual messages or images\n2. **Permanent storage** — Done ≠ delete; deleted = actually removed\n3. **Smart parsing** — Auto-extract time, priority, tags from natural language\n4. **Daily reminders** — Push unfinished tasks at 21:00 via cron\n5. **On-demand** — Don't disturb unless asked\n\n### Key Features\n\n| Feature | Details |\n|---------|---------|\n| Capture | Triggers: `TODO:`, `add todo`, `remind me to`, etc. Fuzzy input → ask, don't silently capture |\n| Query | Triggers: `TODOLIST`, `my todos`, etc. Filter by date/range/priority/tags. Shows 👤contact, 📝notes, 💬source_message for every item |\n| Operations | Complete, delete (with confirmation), modify, undo (single-step only) |\n| Tags | Auto-extract via keyword mapping (工作/学习/购物/生活/健康/其他) or manual `#tag` syntax. Default: empty array |\n| Daily reminder | Cron at 21:00: read todos.json → filter pending with due_time → push if any. Fallback: push on next interaction if >24h since last reminder |\n| Attachments | Saved to `attachments/`, auto-cleaned 7 days after todo deletion |\n\n### Modify Syntax\n- Field name syntax: `#1 due_time:明天`, `#1 priority:P0`, `#1 content:新内容`, `#1 contact:张三`, `#1 notes:补充说明`, `#1 tags:工作,学习`\n- Natural language also supported: `#1 截止:明天`, `#1 优先级:P0`, `#1 内容:新内容`, `#1 对接人:张三`\n- Both are equivalent\n\n### Undo Specification\n- Single-step only: second consecutive undo restores to the bak version (no further rollback)\n- After undo, any new operation overwrites bak — previous undo state is lost\n- In short: always only the most recent operation can be undone\n\n### Data Schema\n```json\n{\n  \"id\": 1, \"content\": \"...\", \"status\": \"pending|done\",\n  \"priority\": \"P0|P1|P2|P3\", \"due_time\": \"YYYY-MM-DD|null\",\n  \"contact\": \"string (optional)\", \"notes\": \"string (optional)\",\n  \"tags\": [], \"created_at\": \"ISO8601\", \"completed_at\": null,\n  \"deleted_at\": null, \"attachments\": [{\"path\":\"\",\"type\":\"image|file\"}],\n  \"source_message\": \"...\"\n}\n```\n\n### Cron Setup (Minimal Steps)\n1. Create cron: `0 21 * * *`\n2. On trigger: read `todos.json` → filter `status != \"done\"` AND `due_time != null` → sort by due_time ascending, then by priority → push if any → update `last_reminder_at`\n3. Append action guide to push message\n\n### Constraints\n- Atomic writes (write to `.tmp` then `mv`)\n- Auto-backup to `todos.json.bak` before writes\n- Auto-recover from `.bak` on parse failure\n- Deleted todo attachments retained 7 days then auto-cleaned\n- Schema migration on version mismatch\n\nFile v2.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn76af6ccjftr7hsds21j60xnn82q1qd\",\n  \"slug\": \"todo-list-promax\",\n  \"version\": \"2.1.0\",\n  \"publishedAt\": 1779479117475\n}\n\nFile v2.1.0:skill-card.md\n\n## Description: <br>\nPersonal todo management system with persistent local storage, smart categorization, attachment capture, and daily reminders. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[z-zihan](https://clawhub.ai/user/z-zihan) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nUsers use this skill to capture, organize, query, modify, and receive reminders for personal todos from chat messages and attachments. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill persistently stores task text, contacts, notes, attachments, backups, and full original messages, then may show them again in lists or reminders. <br>\nMitigation: Avoid using the skill for secrets, confidential work details, sensitive health or financial notes, or private attachments unless local retention and resurfacing are intended. <br>\nRisk: Deleted todo attachments may remain in local storage for up to seven days before cleanup. <br>\nMitigation: Manually review or remove stored attachments when immediate deletion is required. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/z-zihan/todo-list-promax) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, JSON, files, shell commands, configuration guidance] <br>\n**Output Format:** [Markdown/text responses plus local JSON todo records and attachment files] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Persists todo data under ${workspace}/todo-list/ and can provide cron setup guidance for daily reminders.] <br>\n\n## Skill Version(s): <br>\n2.1.0 (source: SKILL.md frontmatter and server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v2.0.2: 2 files, 7403 bytes\n\nFiles: SKILL.md (15194b), _meta.json (135b)\n\nFile v2.0.2:SKILL.md\n\n---\nname: todo-list-promax\nversion: \"2.0.2\"\ndescription: >\n  个人待办事项永久存储、智能分类与定时提醒系统。\n  自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。\n  当用户消息包含以下触发词时激活：\n  【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备忘\"、\"提醒我\"、\"add todo\"、\"remind me to\"、\"don't forget\"、\"note this\"\n  【查询】\"TODOLIST\"、\"待办列表\"、\"查看待办\"、\"看看待办\"、\"我有哪些待办\"、\"今天还有哪些未完成\"、\"还有什么没做\"、\"今天还要干嘛\"、\"今天的事做完了没\"、\"我的清单\"、\"my todos\"、\"todo list\"、\"what's pending\"、\"show todos\"\n  NOT for: 项目管理、日历集成、多人协作、自动执行任务。\n---\n\n# todo-list — 个人待办事项系统\n\n## 语言规则\n\n**检测用户使用的语言，全程使用同一语言输出。** 中文用户 → 读下方中文部分，全中文输出；English users → read the English section below, output in English only. 技术术语（JSON、ID 等）保留原文即可。\n\n---\n\n# 中文版\n\n## 目标\n\n为用户提供一个永久不丢失的待办事项管理系统。自动从聊天消息中捕获待办，智能解析时间和优先级，每日主动提醒未完成任务。\n\n## 核心原则\n\n1. **零摩擦录入** — 用户随意发一句话或一张图，系统自动识别并存储\n2. **永久不丢** — 完成 = 标记 done，不等于删除。已删除 = 真正移除\n3. **智能解析** — 从自然语言自动提取时间、优先级、任务内容\n4. **主动提醒** — 有截止时间的未完成任务，每天 21:00 主动推送\n5. **按需响应** — 用户不问不回复，避免打扰\n\n## 主要职责\n\n### 1. 待办录入\n\n**触发词：** `TODO:`、`帮我记录一下`、`记录：`、`待办：`、`加个待办`、`记一下`、`别忘了`、`记得提醒我`、`回头要做`、`备忘`、`提醒我`、`add todo`、`remind me to`、`don't forget`、`note this`\n\n**模糊输入判定规则：** 消息必须包含**动宾结构**或**明确动作词**才能触发录入。判断标准：\n- ✅ 触发：含动词+宾语（\"提交周报\"、\"买充电线\"、\"看完论文\"）\n- ✅ 触发：含明确动作+目标（\"TODO: 部署测试环境\"）\n- ❌ 不触发：纯状态/意向陈述（\"我打算吃饭\"、\"最近好累\"、\"想学 Rust\"）\n- ❓ 模糊时：**追问而非静默录入**。如\"TODO: 搞一下那个东西\" → 回复\"你想记录什么待办？请具体说明一下任务内容\"\n\n**操作优先级**：如果同一条消息同时匹配录入和操作指令（如\"删除这个 TODO: xxx\"），优先执行操作指令（完成 > 删除 > 修改 > 录入），不创建重复待办。\n\n**矛盾请求处理**：当用户消息包含矛盾指令时（如\"完成了 #1 删除 #1\"或\"TODO: 删除所有待办\"）：\n- 操作间矛盾：按优先级执行第一个操作，忽略矛盾的第二个，并告知用户\n- 批量操作（\"删除所有\"/\"完成全部\"）：列出受影响的项目，逐条确认，不可批量静默执行\n- 越界请求（\"帮我把待办同步到飞书项目\"）：拒绝并提示\"todo-list 仅管理本地待办，不支持外部同步\"\n\n**流程：**\n1. 从用户消息中提取任务内容\n2. 如果消息包含图片/附件，下载并保存到 `${workspace}/todo-list/attachments/`\n3. 解析时间要求（如有）\n4. 解析优先级（如有）\n5. **提取标签（tags）**（见下方标签提取规则）\n6. 生成唯一 ID，写入 `${workspace}/todo-list/todos.json`\n7. 回复用户确认（简洁一行：ID + 摘要 + 优先级 + 截止时间 + 标签）\n\n**时间解析：**\n- 相对时间：今天、明天、后天、下周一、本周五、今晚、月底 等\n- 绝对时间：5月20日、5-20、2026/5/20 等\n- 模糊时间：尽快、ASAP、有空时 → 不设截止时间\n- 精确到\"天\"，不支持具体小时\n- 无法解析时 → 不设截止时间，不追问\n\n**优先级解析：**\n\n| 级别 | 标记方式 | 自然语言线索 |\n|------|---------|-------------|\n| P0 | `[P0]`、`⚠️` | \"很紧急\"、\"立刻\"、\"马上\"、\"必须今天\" |\n| P1 | `[P1]` 或不标 | \"重要\"、\"要做\"（默认） |\n| P2 | `[P2]`、`⚡` | \"急但不重要\"、\"顺手做\" |\n| P3 | `[P3]`、`📌` | \"有空再说\"、\"随手记一下\"、\"不急\" |\n\n无法判断时默认 P1。\n\n**标签（tags）提取规则：**\n\n默认标签集：`工作`、`学习`、`购物`、`生活`、`健康`、`其他`\n\n提取方式：\n1. **手动指定**：用户使用 `#标签名` 语法，如 `TODO: 完成报告 #工作` → tags: [\"工作\"]\n2. **关键词映射**：从消息内容中识别名词类别关键词，自动映射到默认标签：\n\n| 关键词示例 | 映射标签 |\n|-----------|---------|\n| 周报、报告、会议、邮件、项目、汇报、评审、上线 | 工作 |\n| 论文、看书、课程、考试、练习、学习、培训 | 学习 |\n| 买、购物、下单、充值、充电线、耳机 | 购物 |\n| 打扫、做饭、取快递、缴费、搬家、洗衣服 | 生活 |\n| 体检、运动、吃药、跑步、挂号、看医生 | 健康 |\n\n3. **无匹配**：当消息中没有可识别的类别关键词且用户未手动指定标签时，tags 为空数组 `[]`\n4. **多标签**：一条待办可以有多个标签，如 `TODO: 买体检套餐 #健康 #购物` → tags: [\"健康\", \"购物\"]\n5. **自定义标签**：用户可以使用 `#标签名` 指定不在默认集中的标签，如 `TODO: 修复 bug #前端` → tags: [\"前端\"]\n\n**附件处理：**\n- 图片/文件：下载到 `${workspace}/todo-list/attachments/{todoId}_{原文件名}`\n- json 中记录 `attachments: [{path, type}]`，type 枚举：`image`（图片）、`file`（其他文件）\n- 同时有文字和图片时，两者都存储\n\n**附件清理机制：**\n- 每次操作 `todos.json` 时（录入、完成、删除、修改等），检查 `attachments/` 目录中是否存在已删除 todo 的附件\n- 如果该附件关联的 todo 已被删除**超过 7 天**（根据 todo 的删除时间戳判断），则自动清理该附件文件\n- 清理日志追加到 `${workspace}/todo-list/cleanup.log`\n\n### 2. 待办查询\n\n**触发词：** `TODOLIST`、`待办列表`、`查看待办`、`看看待办`、`我有哪些待办`、`今天还有哪些未完成`、`还有什么没做`、`今天还要干嘛`、`今天的事做完了没`、`我的清单`、`my todos`、`todo list`、`what's pending`、`show todos`\n\n**查询模式：**\n- 无条件 → 所有未完成待办，按截止时间升序（无截止排最后），同截止时间再按优先级排序（P0 > P1 > P2 > P3）\n- 按日期 → \"周一的 todo\"、\"5月18日的待办\"、\"今天的\" → 筛选 `due_time` 匹配该日期的未完成项\n- 按时间范围 → \"本周\"、\"本月\" → 筛选 `due_time` 在范围内\n- 按优先级 → \"有哪些紧急的\" → 筛选特定级别\n- 按标签 → \"工作相关的待办\" → 筛选 `tags` 包含对应标签\n\n**输出格式：**\n```\n📋 未完成待办（共 X 条）\n\n🔴 P0 重要紧急\n  #1 今天下班前提交周报  📅 今天  🏷 工作\n\n🟡 P1 重要不紧急\n  #3 看完那篇论文  📅 下周一  🏷 学习\n  #5 整理桌面  （无截止时间）  🏷 生活\n\n🟠 P2 急但不重要\n  #8 回复那个邮件  📅 明天  🏷 工作\n\n🟢 P3 不急\n  #7 买个充电线  📅 有空再说  🏷 购物\n```\n\n### 3. 待办操作\n\n**完成：** \"完成了 #1\" 或 \"TODO 完成 1\" 或 \"done #1\" → 标记 `status: done`，记录 `completed_at`\n**删除：** \"删除 #1\" 或 \"TODO 删除 1\" 或 \"delete #1\" → 回复待删除的 todo 内容摘要（ID + 内容 + 优先级），等用户确认后再移除。用户说\"确认\"或\"删\"时才执行\n**修改：** \"#1 改成明天\" 或 \"#1 change to tomorrow\" → 更新对应字段，回复确认\n\n**可修改字段：** `content`（内容）、`due_time`（截止时间）、`priority`（优先级）、`tags`（标签）\n\n**修改语法：**\n- 字段名语法：`#N due_time:明天`、`#N priority:P0`、`#N content:新的任务描述`、`#N tags:工作,学习`\n- 自然语言语法（同样支持）：`#1 截止:明天`、`#1 优先级:P0`、`#1 内容:新的任务描述`\n- 两种写法等价，系统都能识别\n\n**撤销机制：**\n- 用户说\"撤销\"或\"undo\"时，恢复到 `todos.json.bak` 中的上一版本\n- **仅支持单步 undo**：连续两次 undo 时，第二次 undo 恢复到 bak 之前的版本（即 bak 文件中存储的状态，不会继续回退到更早版本）\n- **undo 后的新操作**：undo 之后再执行任何新操作（录入/完成/删除/修改），新操作会覆盖 `todos.json.bak`，之前的 undo 状态不可再恢复\n- 简言之：永远只能撤销最近一次操作，undo 不是无限回退栈\n\n### 4. 每日提醒\n\n- **时间：** 每天 21:00\n- **配置方式（具体步骤）：**\n\n  使用 OpenClaw cron 创建每日提醒任务，最小步骤如下：\n\n  1. 创建 cron 任务，调度规则为 `0 21 * * *`（每天 21:00）\n  2. cron 任务触发时执行以下流程：\n     a. 读取 `${workspace}/todo-list/todos.json`\n     b. 筛选条件：`status != \"done\"` 且 `due_time != null`\n     c. 按截止时间升序排序（无截止排最后），同截止时间再按优先级排序（P0 > P1 > P2 > P3）\n     d. 如有匹配项，生成紧凑列表消息并推送到用户聊天\n     e. 如无匹配项，不推送\n     f. 更新 `last_reminder_at` 为当前时间\n  3. 推送消息末尾附操作指引：`回复\"完成 #N\"标记完成 · 回复\"TODOLIST\"查看全部 · 回复\"#N due_time:X\"修改 · 回复\"撤销\"恢复最近操作`\n  4. cron 命令示例：`openclaw cron add --schedule \"0 21 * * *\" --task \"Read todos.json, filter pending items with due_time, push reminder if any\"`\n\n- **降级策略：** cron 不可用或执行失败时，在下次用户交互时补充推送未提醒项（检查 `last_reminder_at`，若超过 24 小时则补推）\n\n## 数据结构\n\n存储文件：`${workspace}/todo-list/todos.json`（`workspace` 为当前 OpenClaw 工作目录）\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"提交周报\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"tags\": [\"工作\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"deleted_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:今天下班前提交周报\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\n字段说明：\n- `id`: 自增整数，不重复使用\n- `content`: 任务内容（纯文本摘要）\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: 截止日期 YYYY-MM-DD，可为 null\n- `tags`: 标签数组，用于分类和筛选（如 `[\"工作\", \"bug\"]`），可为空数组\n- `created_at`: 创建时间 ISO 8601\n- `completed_at`: 完成时间 ISO 8601，完成时填入\n- `deleted_at`: 删除时间 ISO 8601，删除时填入（用于附件 7 天清理判断）\n- `attachments`: `[{path, type}]` 附件列表\n- `source_message`: 原始消息内容\n- `last_reminder_at`: 上次提醒时间 ISO 8601（用于降级补推）\n\n## 并发安全\n\n写入 todos.json 时采用原子写模式：先写入临时文件 `todos.json.tmp`，写入成功后 `mv`（rename）替换原文件。避免两个 session 同时写导致数据丢失。\n\n## 约束\n\n- 存储路径：`${workspace}/todo-list/`（相对于当前工作目录）\n- 附件路径：`${workspace}/todo-list/attachments/`\n- ID 自增，已删除的 ID 不重复使用\n- 不修改用户消息原文\n- 删除操作必须二次确认\n- 时间解析精确到天\n- `todos.json` 或目录不存在时自动创建\n- 写入 json 前自动备份上一版本到 `todos.json.bak`\n- 读取 json 解析失败时，尝试使用 `todos.json.bak` 恢复\n- 删除 todo 后，记录 `deleted_at` 时间戳，attachments 目录中的文件**保留 7 天**后自动清理（避免误删后无法恢复）\n- 每次操作 todos.json 时检查是否有超过 7 天的已删除 todo 附件，有则清理\n- Schema 升级：读取时检查 `version` 字段，若不匹配当前版本，执行迁移（如新增字段填默认值）并写回\n\n---\n---\n\n# English Version\n\n> **This skill is written in Chinese.** For full details, please read the Chinese section above.\n> You can ask AI to translate the Chinese section if needed.\n\n## Summary\n\n**todo-list-promax** — Personal todo management system with permanent storage, smart categorization, and daily reminders.\n\n### Core Principles\n1. **Zero-friction input** — Auto-capture from casual messages or images\n2. **Permanent storage** — Done ≠ delete; deleted = actually removed\n3. **Smart parsing** — Auto-extract time, priority, tags from natural language\n4. **Daily reminders** — Push unfinished tasks at 21:00 via cron\n5. **On-demand** — Don't disturb unless asked\n\n### Key Features\n\n| Feature | Details |\n|---------|---------|\n| Capture | Triggers: `TODO:`, `add todo`, `remind me to`, etc. Fuzzy input → ask, don't silently capture |\n| Query | Triggers: `TODOLIST`, `my todos`, etc. Filter by date/range/priority/tags |\n| Operations | Complete, delete (with confirmation), modify, undo (single-step only) |\n| Tags | Auto-extract via keyword mapping (工作/学习/购物/生活/健康/其他) or manual `#tag` syntax. Default: empty array |\n| Daily reminder | Cron at 21:00: read todos.json → filter pending with due_time → push if any. Fallback: push on next interaction if >24h since last reminder |\n| Attachments | Saved to `attachments/`, auto-cleaned 7 days after todo deletion |\n\n### Modify Syntax\n- Field name syntax: `#1 due_time:明天`, `#1 priority:P0`, `#1 content:新内容`, `#1 tags:工作,学习`\n- Natural language also supported: `#1 截止:明天`, `#1 优先级:P0`, `#1 内容:新内容`\n- Both are equivalent\n\n### Undo Specification\n- Single-step only: second consecutive undo restores to the bak version (no further rollback)\n- After undo, any new operation overwrites bak — previous undo state is lost\n- In short: always only the most recent operation can be undone\n\n### Data Schema\n```json\n{\n  \"id\": 1, \"content\": \"...\", \"status\": \"pending|done\",\n  \"priority\": \"P0|P1|P2|P3\", \"due_time\": \"YYYY-MM-DD|null\",\n  \"tags\": [], \"created_at\": \"ISO8601\", \"completed_at\": null,\n  \"deleted_at\": null, \"attachments\": [{\"path\":\"\",\"type\":\"image|file\"}],\n  \"source_message\": \"...\"\n}\n```\n\n### Cron Setup (Minimal Steps)\n1. Create cron: `0 21 * * *`\n2. On trigger: read `todos.json` → filter `status != \"done\"` AND `due_time != null` → sort by due_time ascending, then by priority → push if any → update `last_reminder_at`\n3. Append action guide to push message\n\n### Constraints\n- Atomic writes (write to `.tmp` then `mv`)\n- Auto-backup to `todos.json.bak` before writes\n- Auto-recover from `.bak` on parse failure\n- Deleted todo attachments retained 7 days then auto-cleaned\n- Schema migration on version mismatch\n\nFile v2.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn76af6ccjftr7hsds21j60xnn82q1qd\",\n  \"slug\": \"todo-list-promax\",\n  \"version\": \"2.0.2\",\n  \"publishedAt\": 1779269909062\n}\n\nArchive v2.0.0: 2 files, 8137 bytes\n\nFiles: SKILL.md (17422b), _meta.json (135b)\n\nFile v2.0.0:SKILL.md\n\n---\nname: todo-list-promax\nversion: \"2.0.0\"\ndescription: >\n  个人待办事项永久存储、智能分类与定时提醒系统。\n  自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。\n  当用户消息包含以下触发词时激活：\n  【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备忘\"、\"提醒我\"、\"add todo\"、\"remind me to\"、\"don't forget\"、\"note this\"\n  【查询】\"TODOLIST\"、\"待办列表\"、\"查看待办\"、\"看看待办\"、\"我有哪些待办\"、\"今天还有哪些未完成\"、\"还有什么没做\"、\"今天还要干嘛\"、\"今天的事做完了没\"、\"我的清单\"、\"my todos\"、\"todo list\"、\"what's pending\"、\"show todos\"\n  NOT for: 项目管理、日历集成、多人协作、自动执行任务。\n---\n\n# todo-list — 个人待办事项系统\n\n## 语言规则\n\n**检测用户使用的语言，全程使用同一语言输出。** 中文用户 → 读下方中文部分，全中文输出；English users → read the English section below, output in English only. 技术术语（JSON、ID 等）保留原文即可。\n\n---\n\n# 中文版\n\n## 目标\n\n为用户提供一个永久不丢失的待办事项管理系统。自动从聊天消息中捕获待办，智能解析时间和优先级，每日主动提醒未完成任务。\n\n## 核心原则\n\n1. **零摩擦录入** — 用户随意发一句话或一张图，系统自动识别并存储\n2. **永久不丢** — 完成 = 标记 done，不等于删除。已删除 = 真正移除\n3. **智能解析** — 从自然语言自动提取时间、优先级、任务内容\n4. **主动提醒** — 有截止时间的未完成任务，每天 21:00 主动推送\n5. **按需响应** — 用户不问不回复，避免打扰\n\n## 主要职责\n\n### 1. 待办录入\n\n**触发词：** `TODO:`、`帮我记录一下`、`记录：`、`待办：`、`加个待办`、`记一下`、`别忘了`、`记得提醒我`、`回头要做`、`备忘`、`提醒我`、`add todo`、`remind me to`、`don't forget`、`note this`\n\n**模糊输入判定规则：** 消息必须包含**动宾结构**或**明确动作词**才能触发录入。判断标准：\n- ✅ 触发：含动词+宾语（\"提交周报\"、\"买充电线\"、\"看完论文\"）\n- ✅ 触发：含明确动作+目标（\"TODO: 部署测试环境\"）\n- ❌ 不触发：纯状态/意向陈述（\"我打算吃饭\"、\"最近好累\"、\"想学 Rust\"）\n- ❓ 模糊时：**追问而非静默录入**。如\"TODO: 搞一下那个东西\" → 回复\"你想记录什么待办？请具体说明一下任务内容\"\n\n**操作优先级**：如果同一条消息同时匹配录入和操作指令（如\"删除这个 TODO: xxx\"），优先执行操作指令（完成 > 删除 > 修改 > 录入），不创建重复待办。\n\n**矛盾请求处理**：当用户消息包含矛盾指令时（如\"完成了 #1 删除 #1\"或\"TODO: 删除所有待办\"）：\n- 操作间矛盾：按优先级执行第一个操作，忽略矛盾的第二个，并告知用户\n- 批量操作（\"删除所有\"/\"完成全部\"）：列出受影响的项目，逐条确认，不可批量静默执行\n- 越界请求（\"帮我把待办同步到飞书项目\"）：拒绝并提示\"todo-list 仅管理本地待办，不支持外部同步\"\n\n**流程：**\n1. 从用户消息中提取任务内容\n2. 如果消息包含图片/附件，下载并保存到 `${workspace}/todo-list/attachments/`\n3. 解析时间要求（如有）\n4. 解析优先级（如有）\n5. 生成唯一 ID，写入 `${workspace}/todo-list/todos.json`\n6. 回复用户确认（简洁一行：ID + 摘要 + 优先级 + 截止时间）\n\n**时间解析：**\n- 相对时间：今天、明天、后天、下周一、本周五、今晚、月底 等\n- 绝对时间：5月20日、5-20、2026/5/20 等\n- 模糊时间：尽快、ASAP、有空时 → 不设截止时间\n- 精确到\"天\"，不支持具体小时\n- 无法解析时 → 不设截止时间，不追问\n\n**优先级解析：**\n\n| 级别 | 标记方式 | 自然语言线索 |\n|------|---------|-------------|\n| P0 | `[P0]`、`⚠️` | \"很紧急\"、\"立刻\"、\"马上\"、\"必须今天\" |\n| P1 | `[P1]` 或不标 | \"重要\"、\"要做\"（默认） |\n| P2 | `[P2]`、`⚡` | \"急但不重要\"、\"顺手做\" |\n| P3 | `[P3]`、`📌` | \"有空再说\"、\"随手记一下\"、\"不急\" |\n\n无法判断时默认 P1。\n\n**附件处理：**\n- 图片/文件：下载到 `${workspace}/todo-list/attachments/{todoId}_{原文件名}`\n- json 中记录 `attachments: [{path, type}]`，type 枚举：`image`（图片）、`file`（其他文件）\n- 同时有文字和图片时，两者都存储\n\n### 2. 待办查询\n\n**触发词：** `TODOLIST`、`待办列表`、`查看待办`、`看看待办`、`我有哪些待办`、`今天还有哪些未完成`、`还有什么没做`、`今天还要干嘛`、`今天的事做完了没`、`我的清单`、`my todos`、`todo list`、`what's pending`、`show todos`\n\n**查询模式：**\n- 无条件 → 所有未完成待办，按优先级排序\n- 按日期 → \"周一的 todo\"、\"5月18日的待办\"、\"今天的\" → 筛选 `due_time` 匹配该日期的未完成项\n- 按时间范围 → \"本周\"、\"本月\" → 筛选 `due_time` 在范围内\n- 按优先级 → \"有哪些紧急的\" → 筛选特定级别\n- 按标签 → \"bug 相关的待办\" → 筛选 `tags` 包含关键词\n\n**输出格式：**\n```\n📋 未完成待办（共 X 条）\n\n🔴 P0 重要紧急\n  #1 今天下班前提交周报  📅 今天\n\n🟡 P1 重要不紧急\n  #3 看完那篇论文  📅 下周一\n  #5 整理桌面  （无截止时间）\n\n🟠 P2 急但不重要\n  #8 回复那个邮件  📅 明天\n\n🟢 P3 不急\n  #7 买个充电线  📅 有空再说\n```\n\n### 3. 待办操作\n\n**完成：** \"完成了 #1\" 或 \"TODO 完成 1\" 或 \"done #1\" → 标记 `status: done`，记录 `completed_at`\n**删除：** \"删除 #1\" 或 \"TODO 删除 1\" 或 \"delete #1\" → 回复待删除的 todo 内容摘要（ID + 内容 + 优先级），等用户确认后再移除。用户说\"确认\"或\"删\"时才执行\n**修改：** \"#1 改成明天\" 或 \"#1 change to tomorrow\" → 更新对应字段，回复确认\n\n**可修改字段：** `content`（内容）、`due_time`（截止时间）、`priority`（优先级）。语法：`#N 字段:新值`，如 `#1 截止:明天`、`#1 优先级:P0`、`#1 内容:新的任务描述`\n\n**撤销机制：** 用户说\"撤销\"或\"undo\"时，恢复最近一次操作的待办状态（从 `todos.json.bak` 读取上一版本）。仅支持撤销最近一次操作。\n\n### 4. 每日提醒\n\n- **时间：** 每天 21:00\n- **配置方式：** 使用 OpenClaw cron 功能创建每日提醒任务，或参考 `feishu-cron-reminder` skill 的配置方式。示例：每天 21:00 触发一个 session 读取 todos.json 并筛选未完成项推送。\n- **筛选：** 有 `due_time` 且 `status != done` 的待办\n- **排序：** 按优先级 P0 > P1 > P2 > P3\n- **输出：** 紧凑列表，只推未完成的。末尾附操作指引：`回复\"完成 #N\"标记完成 · 回复\"TODOLIST\"查看全部 · 回复\"#N 改成X\"修改 · 回复\"撤销\"恢复最近操作`\n- **跳过：** 如果没有需要提醒的待办，不推送\n- **降级策略：** cron 不可用或执行失败时，在下次用户交互时补充推送未提醒项（检查 `last_reminder_at`，若超过 24 小时则补推）\n\n## 数据结构\n\n存储文件：`${workspace}/todo-list/todos.json`（`workspace` 为当前 OpenClaw 工作目录）\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"提交周报\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"tags\": [\"工作\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:今天下班前提交周报\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\n字段说明：\n- `id`: 自增整数，不重复使用\n- `content`: 任务内容（纯文本摘要）\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: 截止日期 YYYY-MM-DD，可为 null\n- `tags`: 标签数组，用于分类和筛选（如 `[\"bug\", \"通知\"]`），可为空数组\n- `created_at`: 创建时间 ISO 8601\n- `completed_at`: 完成时间 ISO 8601，完成时填入\n- `attachments`: `[{path, type}]` 附件列表\n- `source_message`: 原始消息内容\n- `last_reminder_at`: 上次提醒时间 ISO 8601（用于降级补推）\n\n## 并发安全\n\n写入 todos.json 时采用原子写模式：先写入临时文件 `todos.json.tmp`，写入成功后 `mv`（rename）替换原文件。避免两个 session 同时写导致数据丢失。\n\n## 约束\n\n- 存储路径：`${workspace}/todo-list/`（相对于当前工作目录）\n- 附件路径：`${workspace}/todo-list/attachments/`\n- ID 自增，已删除的 ID 不重复使用\n- 不修改用户消息原文\n- 删除操作必须二次确认\n- 时间解析精确到天\n- `todos.json` 或目录不存在时自动创建\n- 写入 json 前自动备份上一版本到 `todos.json.bak`\n- 读取 json 解析失败时，尝试使用 `todos.json.bak` 恢复\n- 删除 todo 后，attachments 目录中的文件**保留 7 天**后清理（避免误删后无法恢复）\n- Schema 升级：读取时检查 `version` 字段，若不匹配当前版本，执行迁移（如新增字段填默认值）并写回\n\n---\n---\n\n# English Version\n\n## Goal\n\nProvide a permanent, loss-proof todo management system. Auto-capture todos from chat messages, parse time & priority intelligently, and proactively remind daily.\n\n## Core Principles\n\n1. **Zero-friction input** — User sends a casual message or image, system auto-identifies and stores\n2. **Permanent storage** — Done = mark as done, not delete. Deleted = actually removed\n3. **Smart parsing** — Auto-extract time, priority, and task content from natural language\n4. **Proactive reminders** — Unfinished tasks with deadlines get a daily push at 21:00\n5. **On-demand response** — Don't reply unless asked, avoid disturbance\n\n## Responsibilities\n\n### 1. Todo Capture\n\n**Triggers:** `TODO:`, `add todo`, `remind me to`, `don't forget`, `note this`, `帮我记录一下`, `待办：`, `记一下`, `备忘`, `提醒我`\n\n**Fuzzy input rules:** Message must contain a **verb-object structure** or **clear action word** to trigger. Criteria:\n- ✅ Trigger: verb + object (\"submit report\", \"buy cable\", \"read paper\")\n- ✅ Trigger: clear action + target (\"TODO: deploy test environment\")\n- ❌ No trigger: pure state/intention (\"I plan to eat\", \"tired lately\", \"want to learn Rust\")\n- ❓ Ambiguous: **Ask instead of silently capturing.** E.g., \"TODO: handle that thing\" → reply \"What todo would you like to record? Please specify the task\"\n\n**Operation priority:** If a single message matches both capture and operation triggers, prioritize the operation (complete > delete > modify > capture), do not create duplicates.\n\n**Contradiction handling:** When user message contains conflicting instructions (e.g., \"completed #1 delete #1\" or \"TODO: delete all\"):\n- Operation conflicts: execute the first by priority, ignore the conflicting second, inform user\n- Batch operations (\"delete all\"/\"complete all\"): list affected items, confirm one by one, no silent batch execution\n- Out-of-scope requests (\"sync todos to Feishu\"): reject with \"todo-list only manages local todos, no external sync\"\n\n**Flow:**\n1. Extract task content from user message\n2. If message contains images/attachments, download and save to `${workspace}/todo-list/attachments/`\n3. Parse time requirements (if any)\n4. Parse priority (if any)\n5. Generate unique ID, write to `${workspace}/todo-list/todos.json`\n6. Reply with confirmation (concise one-liner: ID + summary + priority + deadline)\n\n**Time Parsing:**\n- Relative: today, tomorrow, day after tomorrow, next Monday, this Friday, tonight, end of month, etc.\n- Absolute: May 20, 5-20, 2026/5/20, etc.\n- Vague: ASAP, when free, whenever → no deadline set\n- Precision: day-level only, no specific hours\n- Unparseable → no deadline, no follow-up questions\n\n**Priority Parsing:**\n\n| Level | Markers | Natural Language Cues |\n|-------|---------|-----------------------|\n| P0 | `[P0]`, `⚠️` | \"urgent\", \"immediately\", \"right now\", \"must do today\" |\n| P1 | `[P1]` or unmarked | \"important\", \"need to do\" (default) |\n| P2 | `[P2]`, `⚡` | \"urgent but not important\", \"quick one\" |\n| P3 | `[P3]`, `📌` | \"no rush\", \"note to self\", \"whenever\" |\n\nDefault to P1 when unclear.\n\n**Attachment Handling:**\n- Images/files: download to `${workspace}/todo-list/attachments/{todoId}_{original_filename}`\n- Record in json: `attachments: [{path, type}]`, type enum: `image` (images), `file` (other files)\n- When both text and images are present, store both\n\n### 2. Todo Query\n\n**Triggers:** `TODOLIST`, `my todos`, `todo list`, `what's pending`, `show todos`, `待办列表`, `查看待办`, `我有哪些待办`, `还有什么没做`, `我的清单`\n\n**Query Modes:**\n- No filter → all pending todos, sorted by priority\n- By date → \"Monday's todos\", \"May 18 todos\", \"today's\" → filter `due_time` matching that date\n- By time range → \"this week\", \"this month\" → filter `due_time` within range\n- By priority → todos at a specific level (e.g., \"what's urgent\")\n- By tag → \"bug-related todos\" → filter `tags` containing the keyword\n\n**Output Format:**\n```\n📋 Pending Todos (X total)\n\n🔴 P0 Urgent & Important\n  #1 Submit weekly report before end of day  📅 Today\n\n🟡 P1 Important\n  #3 Read that paper  📅 Next Monday\n  #5 Clean up desk  (No deadline)\n\n🟠 P2 Urgent but not important\n  #8 Reply to that email  📅 Tomorrow\n\n🟢 P3 No Rush\n  #7 Buy a charging cable  📅 Whenever\n```\n\n### 3. Todo Operations\n\n**Complete:** \"完成了 #1\" or \"TODO 完成 1\" or \"done #1\" → mark `status: done`, record `completed_at`\n**Delete:** \"删除 #1\" or \"TODO 删除 1\" or \"delete #1\" → reply with the todo's summary, wait for user confirmation. Execute only when user says \"确认\" or \"删\"\n**Modify:** \"#1 改成明天\" or \"#1 change to tomorrow\" → update the corresponding field, reply with confirmation\n\n**Modifiable fields:** `content`, `due_time`, `priority`. Syntax: `#N field:new_value`, e.g., `#1 截止:明天`, `#1 优先级:P0`, `#1 内容:new task description`\n\n**Undo:** When user says \"撤销\" or \"undo\", restore the todo state from the previous version (`todos.json.bak`). Only the most recent operation can be undone.\n\n### 4. Daily Reminder\n\n- **Time:** Every day at 21:00\n- **Setup:** Use OpenClaw cron or `feishu-cron-reminder` skill. Example: trigger a session at 21:00 daily that reads todos.json and filters pending items.\n- **Filter:** Items with `due_time` and `status != done`\n- **Sort:** By priority P0 > P1 > P2 > P3\n- **Output:** Compact list, only pending items. Append action guide: `Reply \"完成 #N\" to mark done · Reply \"TODOLIST\" to view all · Reply \"#N 改成X\" to modify · Reply \"撤销\" to undo`\n- **Skip:** If no reminders needed, don't push\n- **Fallback:** If cron fails or is unavailable, push missed reminders on next user interaction (check `last_reminder_at`, if > 24h ago then push)\n\n## Data Schema\n\nStorage file: `${workspace}/todo-list/todos.json` (`workspace` = current OpenClaw working directory)\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"Submit weekly report\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"tags\": [\"work\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:Submit weekly report before end of day\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\nField Reference:\n- `id`: Auto-increment integer, never reuse\n- `content`: Task content (text summary)\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: Deadline date YYYY-MM-DD, nullable\n- `tags`: Tag array for categorization and filtering (e.g., `[\"bug\", \"notification\"]`), can be empty\n- `created_at`: Creation time ISO 8601\n- `completed_at`: Completion time ISO 8601, set when done\n- `attachments`: `[{path, type}]` attachment list\n- `source_message`: Original message text\n- `last_reminder_at`: Last reminder time ISO 8601 (for fallback push)\n\n## Concurrency Safety\n\nUse atomic writes for todos.json: write to temp file `todos.json.tmp` first, then `mv` (rename) to replace original. Prevents data loss from concurrent session writes.\n\n## Constraints\n\n- Storage path: `${workspace}/todo-list/` (relative to current working directory)\n- Attachment path: `${workspace}/todo-list/attachments/`\n- ID auto-increments, deleted IDs are never reused\n- Do not modify original user messages\n- Delete operations require secondary confirmation\n- Time parsing precision: day-level only\n- Auto-create `todos.json` and directories if they don't exist\n- Auto-backup previous version to `todos.json.bak` before writing\n- If json parsing fails, attempt recovery from `todos.json.bak`\n- After deleting a todo, attachment files are **retained for 7 days** before cleanup (allows recovery from accidental deletion)\n- Schema upgrade: check `version` field on read; if mismatch, execute migration (e.g., add new fields with defaults) and write back\n\nFile v2.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn76af6ccjftr7hsds21j60xnn82q1qd\",\n  \"slug\": \"todo-list-promax\",\n  \"version\": \"2.0.0\",\n  \"publishedAt\": 1779108498150\n}\n\nArchive v0.3.0: 2 files, 8137 bytes\n\nFiles: SKILL.md (17422b), _meta.json (135b)\n\nFile v0.3.0:SKILL.md\n\n---\nname: todo-list-promax\nversion: \"1.3.0\"\ndescription: >\n  个人待办事项永久存储、智能分类与定时提醒系统。\n  自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。\n  当用户消息包含以下触发词时激活：\n  【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备忘\"、\"提醒我\"、\"add todo\"、\"remind me to\"、\"don't forget\"、\"note this\"\n  【查询】\"TODOLIST\"、\"待办列表\"、\"查看待办\"、\"看看待办\"、\"我有哪些待办\"、\"今天还有哪些未完成\"、\"还有什么没做\"、\"今天还要干嘛\"、\"今天的事做完了没\"、\"我的清单\"、\"my todos\"、\"todo list\"、\"what's pending\"、\"show todos\"\n  NOT for: 项目管理、日历集成、多人协作、自动执行任务。\n---\n\n# todo-list — 个人待办事项系统\n\n## 语言规则\n\n**检测用户使用的语言，全程使用同一语言输出。** 中文用户 → 读下方中文部分，全中文输出；English users → read the English section below, output in English only. 技术术语（JSON、ID 等）保留原文即可。\n\n---\n\n# 中文版\n\n## 目标\n\n为用户提供一个永久不丢失的待办事项管理系统。自动从聊天消息中捕获待办，智能解析时间和优先级，每日主动提醒未完成任务。\n\n## 核心原则\n\n1. **零摩擦录入** — 用户随意发一句话或一张图，系统自动识别并存储\n2. **永久不丢** — 完成 = 标记 done，不等于删除。已删除 = 真正移除\n3. **智能解析** — 从自然语言自动提取时间、优先级、任务内容\n4. **主动提醒** — 有截止时间的未完成任务，每天 21:00 主动推送\n5. **按需响应** — 用户不问不回复，避免打扰\n\n## 主要职责\n\n### 1. 待办录入\n\n**触发词：** `TODO:`、`帮我记录一下`、`记录：`、`待办：`、`加个待办`、`记一下`、`别忘了`、`记得提醒我`、`回头要做`、`备忘`、`提醒我`、`add todo`、`remind me to`、`don't forget`、`note this`\n\n**模糊输入判定规则：** 消息必须包含**动宾结构**或**明确动作词**才能触发录入。判断标准：\n- ✅ 触发：含动词+宾语（\"提交周报\"、\"买充电线\"、\"看完论文\"）\n- ✅ 触发：含明确动作+目标（\"TODO: 部署测试环境\"）\n- ❌ 不触发：纯状态/意向陈述（\"我打算吃饭\"、\"最近好累\"、\"想学 Rust\"）\n- ❓ 模糊时：**追问而非静默录入**。如\"TODO: 搞一下那个东西\" → 回复\"你想记录什么待办？请具体说明一下任务内容\"\n\n**操作优先级**：如果同一条消息同时匹配录入和操作指令（如\"删除这个 TODO: xxx\"），优先执行操作指令（完成 > 删除 > 修改 > 录入），不创建重复待办。\n\n**矛盾请求处理**：当用户消息包含矛盾指令时（如\"完成了 #1 删除 #1\"或\"TODO: 删除所有待办\"）：\n- 操作间矛盾：按优先级执行第一个操作，忽略矛盾的第二个，并告知用户\n- 批量操作（\"删除所有\"/\"完成全部\"）：列出受影响的项目，逐条确认，不可批量静默执行\n- 越界请求（\"帮我把待办同步到飞书项目\"）：拒绝并提示\"todo-list 仅管理本地待办，不支持外部同步\"\n\n**流程：**\n1. 从用户消息中提取任务内容\n2. 如果消息包含图片/附件，下载并保存到 `${workspace}/todo-list/attachments/`\n3. 解析时间要求（如有）\n4. 解析优先级（如有）\n5. 生成唯一 ID，写入 `${workspace}/todo-list/todos.json`\n6. 回复用户确认（简洁一行：ID + 摘要 + 优先级 + 截止时间）\n\n**时间解析：**\n- 相对时间：今天、明天、后天、下周一、本周五、今晚、月底 等\n- 绝对时间：5月20日、5-20、2026/5/20 等\n- 模糊时间：尽快、ASAP、有空时 → 不设截止时间\n- 精确到\"天\"，不支持具体小时\n- 无法解析时 → 不设截止时间，不追问\n\n**优先级解析：**\n\n| 级别 | 标记方式 | 自然语言线索 |\n|------|---------|-------------|\n| P0 | `[P0]`、`⚠️` | \"很紧急\"、\"立刻\"、\"马上\"、\"必须今天\" |\n| P1 | `[P1]` 或不标 | \"重要\"、\"要做\"（默认） |\n| P2 | `[P2]`、`⚡` | \"急但不重要\"、\"顺手做\" |\n| P3 | `[P3]`、`📌` | \"有空再说\"、\"随手记一下\"、\"不急\" |\n\n无法判断时默认 P1。\n\n**附件处理：**\n- 图片/文件：下载到 `${workspace}/todo-list/attachments/{todoId}_{原文件名}`\n- json 中记录 `attachments: [{path, type}]`，type 枚举：`image`（图片）、`file`（其他文件）\n- 同时有文字和图片时，两者都存储\n\n### 2. 待办查询\n\n**触发词：** `TODOLIST`、`待办列表`、`查看待办`、`看看待办`、`我有哪些待办`、`今天还有哪些未完成`、`还有什么没做`、`今天还要干嘛`、`今天的事做完了没`、`我的清单`、`my todos`、`todo list`、`what's pending`、`show todos`\n\n**查询模式：**\n- 无条件 → 所有未完成待办，按优先级排序\n- 按日期 → \"周一的 todo\"、\"5月18日的待办\"、\"今天的\" → 筛选 `due_time` 匹配该日期的未完成项\n- 按时间范围 → \"本周\"、\"本月\" → 筛选 `due_time` 在范围内\n- 按优先级 → \"有哪些紧急的\" → 筛选特定级别\n- 按标签 → \"bug 相关的待办\" → 筛选 `tags` 包含关键词\n\n**输出格式：**\n```\n📋 未完成待办（共 X 条）\n\n🔴 P0 重要紧急\n  #1 今天下班前提交周报  📅 今天\n\n🟡 P1 重要不紧急\n  #3 看完那篇论文  📅 下周一\n  #5 整理桌面  （无截止时间）\n\n🟠 P2 急但不重要\n  #8 回复那个邮件  📅 明天\n\n🟢 P3 不急\n  #7 买个充电线  📅 有空再说\n```\n\n### 3. 待办操作\n\n**完成：** \"完成了 #1\" 或 \"TODO 完成 1\" 或 \"done #1\" → 标记 `status: done`，记录 `completed_at`\n**删除：** \"删除 #1\" 或 \"TODO 删除 1\" 或 \"delete #1\" → 回复待删除的 todo 内容摘要（ID + 内容 + 优先级），等用户确认后再移除。用户说\"确认\"或\"删\"时才执行\n**修改：** \"#1 改成明天\" 或 \"#1 change to tomorrow\" → 更新对应字段，回复确认\n\n**可修改字段：** `content`（内容）、`due_time`（截止时间）、`priority`（优先级）。语法：`#N 字段:新值`，如 `#1 截止:明天`、`#1 优先级:P0`、`#1 内容:新的任务描述`\n\n**撤销机制：** 用户说\"撤销\"或\"undo\"时，恢复最近一次操作的待办状态（从 `todos.json.bak` 读取上一版本）。仅支持撤销最近一次操作。\n\n### 4. 每日提醒\n\n- **时间：** 每天 21:00\n- **配置方式：** 使用 OpenClaw cron 功能创建每日提醒任务，或参考 `feishu-cron-reminder` skill 的配置方式。示例：每天 21:00 触发一个 session 读取 todos.json 并筛选未完成项推送。\n- **筛选：** 有 `due_time` 且 `status != done` 的待办\n- **排序：** 按优先级 P0 > P1 > P2 > P3\n- **输出：** 紧凑列表，只推未完成的。末尾附操作指引：`回复\"完成 #N\"标记完成 · 回复\"TODOLIST\"查看全部 · 回复\"#N 改成X\"修改 · 回复\"撤销\"恢复最近操作`\n- **跳过：** 如果没有需要提醒的待办，不推送\n- **降级策略：** cron 不可用或执行失败时，在下次用户交互时补充推送未提醒项（检查 `last_reminder_at`，若超过 24 小时则补推）\n\n## 数据结构\n\n存储文件：`${workspace}/todo-list/todos.json`（`workspace` 为当前 OpenClaw 工作目录）\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"提交周报\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"tags\": [\"工作\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:今天下班前提交周报\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\n字段说明：\n- `id`: 自增整数，不重复使用\n- `content`: 任务内容（纯文本摘要）\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: 截止日期 YYYY-MM-DD，可为 null\n- `tags`: 标签数组，用于分类和筛选（如 `[\"bug\", \"通知\"]`），可为空数组\n- `created_at`: 创建时间 ISO 8601\n- `completed_at`: 完成时间 ISO 8601，完成时填入\n- `attachments`: `[{path, type}]` 附件列表\n- `source_message`: 原始消息内容\n- `last_reminder_at`: 上次提醒时间 ISO 8601（用于降级补推）\n\n## 并发安全\n\n写入 todos.json 时采用原子写模式：先写入临时文件 `todos.json.tmp`，写入成功后 `mv`（rename）替换原文件。避免两个 session 同时写导致数据丢失。\n\n## 约束\n\n- 存储路径：`${workspace}/todo-list/`（相对于当前工作目录）\n- 附件路径：`${workspace}/todo-list/attachments/`\n- ID 自增，已删除的 ID 不重复使用\n- 不修改用户消息原文\n- 删除操作必须二次确认\n- 时间解析精确到天\n- `todos.json` 或目录不存在时自动创建\n- 写入 json 前自动备份上一版本到 `todos.json.bak`\n- 读取 json 解析失败时，尝试使用 `todos.json.bak` 恢复\n- 删除 todo 后，attachments 目录中的文件**保留 7 天**后清理（避免误删后无法恢复）\n- Schema 升级：读取时检查 `version` 字段，若不匹配当前版本，执行迁移（如新增字段填默认值）并写回\n\n---\n---\n\n# English Version\n\n## Goal\n\nProvide a permanent, loss-proof todo management system. Auto-capture todos from chat messages, parse time & priority intelligently, and proactively remind daily.\n\n## Core Principles\n\n1. **Zero-friction input** — User sends a casual message or image, system auto-identifies and stores\n2. **Permanent storage** — Done = mark as done, not delete. Deleted = actually removed\n3. **Smart parsing** — Auto-extract time, priority, and task content from natural language\n4. **Proactive reminders** — Unfinished tasks with deadlines get a daily push at 21:00\n5. **On-demand response** — Don't reply unless asked, avoid disturbance\n\n## Responsibilities\n\n### 1. Todo Capture\n\n**Triggers:** `TODO:`, `add todo`, `remind me to`, `don't forget`, `note this`, `帮我记录一下`, `待办：`, `记一下`, `备忘`, `提醒我`\n\n**Fuzzy input rules:** Message must contain a **verb-object structure** or **clear action word** to trigger. Criteria:\n- ✅ Trigger: verb + object (\"submit report\", \"buy cable\", \"read paper\")\n- ✅ Trigger: clear action + target (\"TODO: deploy test environment\")\n- ❌ No trigger: pure state/intention (\"I plan to eat\", \"tired lately\", \"want to learn Rust\")\n- ❓ Ambiguous: **Ask instead of silently capturing.** E.g., \"TODO: handle that thing\" → reply \"What todo would you like to record? Please specify the task\"\n\n**Operation priority:** If a single message matches both capture and operation triggers, prioritize the operation (complete > delete > modify > capture), do not create duplicates.\n\n**Contradiction handling:** When user message contains conflicting instructions (e.g., \"completed #1 delete #1\" or \"TODO: delete all\"):\n- Operation conflicts: execute the first by priority, ignore the conflicting second, inform user\n- Batch operations (\"delete all\"/\"complete all\"): list affected items, confirm one by one, no silent batch execution\n- Out-of-scope requests (\"sync todos to Feishu\"): reject with \"todo-list only manages local todos, no external sync\"\n\n**Flow:**\n1. Extract task content from user message\n2. If message contains images/attachments, download and save to `${workspace}/todo-list/attachments/`\n3. Parse time requirements (if any)\n4. Parse priority (if any)\n5. Generate unique ID, write to `${workspace}/todo-list/todos.json`\n6. Reply with confirmation (concise one-liner: ID + summary + priority + deadline)\n\n**Time Parsing:**\n- Relative: today, tomorrow, day after tomorrow, next Monday, this Friday, tonight, end of month, etc.\n- Absolute: May 20, 5-20, 2026/5/20, etc.\n- Vague: ASAP, when free, whenever → no deadline set\n- Precision: day-level only, no specific hours\n- Unparseable → no deadline, no follow-up questions\n\n**Priority Parsing:**\n\n| Level | Markers | Natural Language Cues |\n|-------|---------|-----------------------|\n| P0 | `[P0]`, `⚠️` | \"urgent\", \"immediately\", \"right now\", \"must do today\" |\n| P1 | `[P1]` or unmarked | \"important\", \"need to do\" (default) |\n| P2 | `[P2]`, `⚡` | \"urgent but not important\", \"quick one\" |\n| P3 | `[P3]`, `📌` | \"no rush\", \"note to self\", \"whenever\" |\n\nDefault to P1 when unclear.\n\n**Attachment Handling:**\n- Images/files: download to `${workspace}/todo-list/attachments/{todoId}_{original_filename}`\n- Record in json: `attachments: [{path, type}]`, type enum: `image` (images), `file` (other files)\n- When both text and images are present, store both\n\n### 2. Todo Query\n\n**Triggers:** `TODOLIST`, `my todos`, `todo list`, `what's pending`, `show todos`, `待办列表`, `查看待办`, `我有哪些待办`, `还有什么没做`, `我的清单`\n\n**Query Modes:**\n- No filter → all pending todos, sorted by priority\n- By date → \"Monday's todos\", \"May 18 todos\", \"today's\" → filter `due_time` matching that date\n- By time range → \"this week\", \"this month\" → filter `due_time` within range\n- By priority → todos at a specific level (e.g., \"what's urgent\")\n- By tag → \"bug-related todos\" → filter `tags` containing the keyword\n\n**Output Format:**\n```\n📋 Pending Todos (X total)\n\n🔴 P0 Urgent & Important\n  #1 Submit weekly report before end of day  📅 Today\n\n🟡 P1 Important\n  #3 Read that paper  📅 Next Monday\n  #5 Clean up desk  (No deadline)\n\n🟠 P2 Urgent but not important\n  #8 Reply to that email  📅 Tomorrow\n\n🟢 P3 No Rush\n  #7 Buy a charging cable  📅 Whenever\n```\n\n### 3. Todo Operations\n\n**Complete:** \"完成了 #1\" or \"TODO 完成 1\" or \"done #1\" → mark `status: done`, record `completed_at`\n**Delete:** \"删除 #1\" or \"TODO 删除 1\" or \"delete #1\" → reply with the todo's summary, wait for user confirmation. Execute only when user says \"确认\" or \"删\"\n**Modify:** \"#1 改成明天\" or \"#1 change to tomorrow\" → update the corresponding field, reply with confirmation\n\n**Modifiable fields:** `content`, `due_time`, `priority`. Syntax: `#N field:new_value`, e.g., `#1 截止:明天`, `#1 优先级:P0`, `#1 内容:new task description`\n\n**Undo:** When user says \"撤销\" or \"undo\", restore the todo state from the previous version (`todos.json.bak`). Only the most recent operation can be undone.\n\n### 4. Daily Reminder\n\n- **Time:** Every day at 21:00\n- **Setup:** Use OpenClaw cron or `feishu-cron-reminder` skill. Example: trigger a session at 21:00 daily that reads todos.json and filters pending items.\n- **Filter:** Items with `due_time` and `status != done`\n- **Sort:** By priority P0 > P1 > P2 > P3\n- **Output:** Compact list, only pending items. Append action guide: `Reply \"完成 #N\" to mark done · Reply \"TODOLIST\" to view all · Reply \"#N 改成X\" to modify · Reply \"撤销\" to undo`\n- **Skip:** If no reminders needed, don't push\n- **Fallback:** If cron fails or is unavailable, push missed reminders on next user interaction (check `last_reminder_at`, if > 24h ago then push)\n\n## Data Schema\n\nStorage file: `${workspace}/todo-list/todos.json` (`workspace` = current OpenClaw working directory)\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"Submit weekly report\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"tags\": [\"work\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:Submit weekly report before end of day\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\nField Reference:\n- `id`: Auto-increment integer, never reuse\n- `content`: Task content (text summary)\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: Deadline date YYYY-MM-DD, nullable\n- `tags`: Tag array for categorization and filtering (e.g., `[\"bug\", \"notification\"]`), can be empty\n- `created_at`: Creation time ISO 8601\n- `completed_at`: Completion time ISO 8601, set when done\n- `attachments`: `[{path, type}]` attachment list\n- `source_message`: Original message text\n- `last_reminder_at`: Last reminder time ISO 8601 (for fallback push)\n\n## Concurrency Safety\n\nUse atomic writes for todos.json: write to temp file `todos.json.tmp` first, then `mv` (rename) to replace original. Prevents data loss from concurrent session writes.\n\n## Constraints\n\n- Storage path: `${workspace}/todo-list/` (relative to current working directory)\n- Attachment path: `${workspace}/todo-list/attachments/`\n- ID auto-increments, deleted IDs are never reused\n- Do not modify original user messages\n- Delete operations require secondary confirmation\n- Time parsing precision: day-level only\n- Auto-create `todos.json` and directories if they don't exist\n- Auto-backup previous version to `todos.json.bak` before writing\n- If json parsing fails, attempt recovery from `todos.json.bak`\n- After deleting a todo, attachment files are **retained for 7 days** before cleanup (allows recovery from accidental deletion)\n- Schema upgrade: check `version` field on read; if mismatch, execute migration (e.g., add new fields with defaults) and write back\n\nFile v0.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn76af6ccjftr7hsds21j60xnn82q1qd\",\n  \"slug\": \"todo-list-promax\",\n  \"version\": \"0.3.0\",\n  \"publishedAt\": 1779091884464\n}\n\nArchive v1.3.1: 2 files, 8136 bytes\n\nFiles: SKILL.md (17422b), _meta.json (135b)\n\nFile v1.3.1:SKILL.md\n\n---\nname: todo-list-promax\nversion: \"1.3.0\"\ndescription: >\n  个人待办事项永久存储、智能分类与定时提醒系统。\n  自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。\n  当用户消息包含以下触发词时激活：\n  【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备忘\"、\"提醒我\"、\"add todo\"、\"remind me to\"、\"don't forget\"、\"note this\"\n  【查询】\"TODOLIST\"、\"待办列表\"、\"查看待办\"、\"看看待办\"、\"我有哪些待办\"、\"今天还有哪些未完成\"、\"还有什么没做\"、\"今天还要干嘛\"、\"今天的事做完了没\"、\"我的清单\"、\"my todos\"、\"todo list\"、\"what's pending\"、\"show todos\"\n  NOT for: 项目管理、日历集成、多人协作、自动执行任务。\n---\n\n# todo-list — 个人待办事项系统\n\n## 语言规则\n\n**检测用户使用的语言，全程使用同一语言输出。** 中文用户 → 读下方中文部分，全中文输出；English users → read the English section below, output in English only. 技术术语（JSON、ID 等）保留原文即可。\n\n---\n\n# 中文版\n\n## 目标\n\n为用户提供一个永久不丢失的待办事项管理系统。自动从聊天消息中捕获待办，智能解析时间和优先级，每日主动提醒未完成任务。\n\n## 核心原则\n\n1. **零摩擦录入** — 用户随意发一句话或一张图，系统自动识别并存储\n2. **永久不丢** — 完成 = 标记 done，不等于删除。已删除 = 真正移除\n3. **智能解析** — 从自然语言自动提取时间、优先级、任务内容\n4. **主动提醒** — 有截止时间的未完成任务，每天 21:00 主动推送\n5. **按需响应** — 用户不问不回复，避免打扰\n\n## 主要职责\n\n### 1. 待办录入\n\n**触发词：** `TODO:`、`帮我记录一下`、`记录：`、`待办：`、`加个待办`、`记一下`、`别忘了`、`记得提醒我`、`回头要做`、`备忘`、`提醒我`、`add todo`、`remind me to`、`don't forget`、`note this`\n\n**模糊输入判定规则：** 消息必须包含**动宾结构**或**明确动作词**才能触发录入。判断标准：\n- ✅ 触发：含动词+宾语（\"提交周报\"、\"买充电线\"、\"看完论文\"）\n- ✅ 触发：含明确动作+目标（\"TODO: 部署测试环境\"）\n- ❌ 不触发：纯状态/意向陈述（\"我打算吃饭\"、\"最近好累\"、\"想学 Rust\"）\n- ❓ 模糊时：**追问而非静默录入**。如\"TODO: 搞一下那个东西\" → 回复\"你想记录什么待办？请具体说明一下任务内容\"\n\n**操作优先级**：如果同一条消息同时匹配录入和操作指令（如\"删除这个 TODO: xxx\"），优先执行操作指令（完成 > 删除 > 修改 > 录入），不创建重复待办。\n\n**矛盾请求处理**：当用户消息包含矛盾指令时（如\"完成了 #1 删除 #1\"或\"TODO: 删除所有待办\"）：\n- 操作间矛盾：按优先级执行第一个操作，忽略矛盾的第二个，并告知用户\n- 批量操作（\"删除所有\"/\"完成全部\"）：列出受影响的项目，逐条确认，不可批量静默执行\n- 越界请求（\"帮我把待办同步到飞书项目\"）：拒绝并提示\"todo-list 仅管理本地待办，不支持外部同步\"\n\n**流程：**\n1. 从用户消息中提取任务内容\n2. 如果消息包含图片/附件，下载并保存到 `${workspace}/todo-list/attachments/`\n3. 解析时间要求（如有）\n4. 解析优先级（如有）\n5. 生成唯一 ID，写入 `${workspace}/todo-list/todos.json`\n6. 回复用户确认（简洁一行：ID + 摘要 + 优先级 + 截止时间）\n\n**时间解析：**\n- 相对时间：今天、明天、后天、下周一、本周五、今晚、月底 等\n- 绝对时间：5月20日、5-20、2026/5/20 等\n- 模糊时间：尽快、ASAP、有空时 → 不设截止时间\n- 精确到\"天\"，不支持具体小时\n- 无法解析时 → 不设截止时间，不追问\n\n**优先级解析：**\n\n| 级别 | 标记方式 | 自然语言线索 |\n|------|---------|-------------|\n| P0 | `[P0]`、`⚠️` | \"很紧急\"、\"立刻\"、\"马上\"、\"必须今天\" |\n| P1 | `[P1]` 或不标 | \"重要\"、\"要做\"（默认） |\n| P2 | `[P2]`、`⚡` | \"急但不重要\"、\"顺手做\" |\n| P3 | `[P3]`、`📌` | \"有空再说\"、\"随手记一下\"、\"不急\" |\n\n无法判断时默认 P1。\n\n**附件处理：**\n- 图片/文件：下载到 `${workspace}/todo-list/attachments/{todoId}_{原文件名}`\n- json 中记录 `attachments: [{path, type}]`，type 枚举：`image`（图片）、`file`（其他文件）\n- 同时有文字和图片时，两者都存储\n\n### 2. 待办查询\n\n**触发词：** `TODOLIST`、`待办列表`、`查看待办`、`看看待办`、`我有哪些待办`、`今天还有哪些未完成`、`还有什么没做`、`今天还要干嘛`、`今天的事做完了没`、`我的清单`、`my todos`、`todo list`、`what's pending`、`show todos`\n\n**查询模式：**\n- 无条件 → 所有未完成待办，按优先级排序\n- 按日期 → \"周一的 todo\"、\"5月18日的待办\"、\"今天的\" → 筛选 `due_time` 匹配该日期的未完成项\n- 按时间范围 → \"本周\"、\"本月\" → 筛选 `due_time` 在范围内\n- 按优先级 → \"有哪些紧急的\" → 筛选特定级别\n- 按标签 → \"bug 相关的待办\" → 筛选 `tags` 包含关键词\n\n**输出格式：**\n```\n📋 未完成待办（共 X 条）\n\n🔴 P0 重要紧急\n  #1 今天下班前提交周报  📅 今天\n\n🟡 P1 重要不紧急\n  #3 看完那篇论文  📅 下周一\n  #5 整理桌面  （无截止时间）\n\n🟠 P2 急但不重要\n  #8 回复那个邮件  📅 明天\n\n🟢 P3 不急\n  #7 买个充电线  📅 有空再说\n```\n\n### 3. 待办操作\n\n**完成：** \"完成了 #1\" 或 \"TODO 完成 1\" 或 \"done #1\" → 标记 `status: done`，记录 `completed_at`\n**删除：** \"删除 #1\" 或 \"TODO 删除 1\" 或 \"delete #1\" → 回复待删除的 todo 内容摘要（ID + 内容 + 优先级），等用户确认后再移除。用户说\"确认\"或\"删\"时才执行\n**修改：** \"#1 改成明天\" 或 \"#1 change to tomorrow\" → 更新对应字段，回复确认\n\n**可修改字段：** `content`（内容）、`due_time`（截止时间）、`priority`（优先级）。语法：`#N 字段:新值`，如 `#1 截止:明天`、`#1 优先级:P0`、`#1 内容:新的任务描述`\n\n**撤销机制：** 用户说\"撤销\"或\"undo\"时，恢复最近一次操作的待办状态（从 `todos.json.bak` 读取上一版本）。仅支持撤销最近一次操作。\n\n### 4. 每日提醒\n\n- **时间：** 每天 21:00\n- **配置方式：** 使用 OpenClaw cron 功能创建每日提醒任务，或参考 `feishu-cron-reminder` skill 的配置方式。示例：每天 21:00 触发一个 session 读取 todos.json 并筛选未完成项推送。\n- **筛选：** 有 `due_time` 且 `status != done` 的待办\n- **排序：** 按优先级 P0 > P1 > P2 > P3\n- **输出：** 紧凑列表，只推未完成的。末尾附操作指引：`回复\"完成 #N\"标记完成 · 回复\"TODOLIST\"查看全部 · 回复\"#N 改成X\"修改 · 回复\"撤销\"恢复最近操作`\n- **跳过：** 如果没有需要提醒的待办，不推送\n- **降级策略：** cron 不可用或执行失败时，在下次用户交互时补充推送未提醒项（检查 `last_reminder_at`，若超过 24 小时则补推）\n\n## 数据结构\n\n存储文件：`${workspace}/todo-list/todos.json`（`workspace` 为当前 OpenClaw 工作目录）\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"提交周报\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"tags\": [\"工作\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:今天下班前提交周报\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\n字段说明：\n- `id`: 自增整数，不重复使用\n- `content`: 任务内容（纯文本摘要）\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: 截止日期 YYYY-MM-DD，可为 null\n- `tags`: 标签数组，用于分类和筛选（如 `[\"bug\", \"通知\"]`），可为空数组\n- `created_at`: 创建时间 ISO 8601\n- `completed_at`: 完成时间 ISO 8601，完成时填入\n- `attachments`: `[{path, type}]` 附件列表\n- `source_message`: 原始消息内容\n- `last_reminder_at`: 上次提醒时间 ISO 8601（用于降级补推）\n\n## 并发安全\n\n写入 todos.json 时采用原子写模式：先写入临时文件 `todos.json.tmp`，写入成功后 `mv`（rename）替换原文件。避免两个 session 同时写导致数据丢失。\n\n## 约束\n\n- 存储路径：`${workspace}/todo-list/`（相对于当前工作目录）\n- 附件路径：`${workspace}/todo-list/attachments/`\n- ID 自增，已删除的 ID 不重复使用\n- 不修改用户消息原文\n- 删除操作必须二次确认\n- 时间解析精确到天\n- `todos.json` 或目录不存在时自动创建\n- 写入 json 前自动备份上一版本到 `todos.json.bak`\n- 读取 json 解析失败时，尝试使用 `todos.json.bak` 恢复\n- 删除 todo 后，attachments 目录中的文件**保留 7 天**后清理（避免误删后无法恢复）\n- Schema 升级：读取时检查 `version` 字段，若不匹配当前版本，执行迁移（如新增字段填默认值）并写回\n\n---\n---\n\n# English Version\n\n## Goal\n\nProvide a permanent, loss-proof todo management system. Auto-capture todos from chat messages, parse time & priority intelligently, and proactively remind daily.\n\n## Core Principles\n\n1. **Zero-friction input** — User sends a casual message or image, system auto-identifies and stores\n2. **Permanent storage** — Done = mark as done, not delete. Deleted = actually removed\n3. **Smart parsing** — Auto-extract time, priority, and task content from natural language\n4. **Proactive reminders** — Unfinished tasks with deadlines get a daily push at 21:00\n5. **On-demand response** — Don't reply unless asked, avoid disturbance\n\n## Responsibilities\n\n### 1. Todo Capture\n\n**Triggers:** `TODO:`, `add todo`, `remind me to`, `don't forget`, `note this`, `帮我记录一下`, `待办：`, `记一下`, `备忘`, `提醒我`\n\n**Fuzzy input rules:** Message must contain a **verb-object structure** or **clear action word** to trigger. Criteria:\n- ✅ Trigger: verb + object (\"submit report\", \"buy cable\", \"read paper\")\n- ✅ Trigger: clear action + target (\"TODO: deploy test environment\")\n- ❌ No trigger: pure state/intention (\"I plan to eat\", \"tired lately\", \"want to learn Rust\")\n- ❓ Ambiguous: **Ask instead of silently capturing.** E.g., \"TODO: handle that thing\" → reply \"What todo would you like to record? Please specify the task\"\n\n**Operation priority:** If a single message matches both capture and operation triggers, prioritize the operation (complete > delete > modify > capture), do not create duplicates.\n\n**Contradiction handling:** When user message contains conflicting instructions (e.g., \"completed #1 delete #1\" or \"TODO: delete all\"):\n- Operation conflicts: execute the first by priority, ignore the conflicting second, inform user\n- Batch operations (\"delete all\"/\"complete all\"): list affected items, confirm one by one, no silent batch execution\n- Out-of-scope requests (\"sync todos to Feishu\"): reject with \"todo-list only manages local todos, no external sync\"\n\n**Flow:**\n1. Extract task content from user message\n2. If message contains images/attachments, download and save to `${workspace}/todo-list/attachments/`\n3. Parse time requirements (if any)\n4. Parse priority (if any)\n5. Generate unique ID, write to `${workspace}/todo-list/todos.json`\n6. Reply with confirmation (concise one-liner: ID + summary + priority + deadline)\n\n**Time Parsing:**\n- Relative: today, tomorrow, day after tomorrow, next Monday, this Friday, tonight, end of month, etc.\n- Absolute: May 20, 5-20, 2026/5/20, etc.\n- Vague: ASAP, when free, whenever → no deadline set\n- Precision: day-level only, no specific hours\n- Unparseable → no deadline, no follow-up questions\n\n**Priority Parsing:**\n\n| Level | Markers | Natural Language Cues |\n|-------|---------|-----------------------|\n| P0 | `[P0]`, `⚠️` | \"urgent\", \"immediately\", \"right now\", \"must do today\" |\n| P1 | `[P1]` or unmarked | \"important\", \"need to do\" (default) |\n| P2 | `[P2]`, `⚡` | \"urgent but not important\", \"quick one\" |\n| P3 | `[P3]`, `📌` | \"no rush\", \"note to self\", \"whenever\" |\n\nDefault to P1 when unclear.\n\n**Attachment Handling:**\n- Images/files: download to `${workspace}/todo-list/attachments/{todoId}_{original_filename}`\n- Record in json: `attachments: [{path, type}]`, type enum: `image` (images), `file` (other files)\n- When both text and images are present, store both\n\n### 2. Todo Query\n\n**Triggers:** `TODOLIST`, `my todos`, `todo list`, `what's pending`, `show todos`, `待办列表`, `查看待办`, `我有哪些待办`, `还有什么没做`, `我的清单`\n\n**Query Modes:**\n- No filter → all pending todos, sorted by priority\n- By date → \"Monday's todos\", \"May 18 todos\", \"today's\" → filter `due_time` matching that date\n- By time range → \"this week\", \"this month\" → filter `due_time` within range\n- By priority → todos at a specific level (e.g., \"what's urgent\")\n- By tag → \"bug-related todos\" → filter `tags` containing the keyword\n\n**Output Format:**\n```\n📋 Pending Todos (X total)\n\n🔴 P0 Urgent & Important\n  #1 Submit weekly report before end of day  📅 Today\n\n🟡 P1 Important\n  #3 Read that paper  📅 Next Monday\n  #5 Clean up desk  (No deadline)\n\n🟠 P2 Urgent but not important\n  #8 Reply to that email  📅 Tomorrow\n\n🟢 P3 No Rush\n  #7 Buy a charging cable  📅 Whenever\n```\n\n### 3. Todo Operations\n\n**Complete:** \"完成了 #1\" or \"TODO 完成 1\" or \"done #1\" → mark `status: done`, record `completed_at`\n**Delete:** \"删除 #1\" or \"TODO 删除 1\" or \"delete #1\" → reply with the todo's summary, wait for user confirmation. Execute only when user says \"确认\" or \"删\"\n**Modify:** \"#1 改成明天\" or \"#1 change to tomorrow\" → update the corresponding field, reply with confirmation\n\n**Modifiable fields:** `content`, `due_time`, `priority`. Syntax: `#N field:new_value`, e.g., `#1 截止:明天`, `#1 优先级:P0`, `#1 内容:new task description`\n\n**Undo:** When user says \"撤销\" or \"undo\", restore the todo state from the previous version (`todos.json.bak`). Only the most recent operation can be undone.\n\n### 4. Daily Reminder\n\n- **Time:** Every day at 21:00\n- **Setup:** Use OpenClaw cron or `feishu-cron-reminder` skill. Example: trigger a session at 21:00 daily that reads todos.json and filters pending items.\n- **Filter:** Items with `due_time` and `status != done`\n- **Sort:** By priority P0 > P1 > P2 > P3\n- **Output:** Compact list, only pending items. Append action guide: `Reply \"完成 #N\" to mark done · Reply \"TODOLIST\" to view all · Reply \"#N 改成X\" to modify · Reply \"撤销\" to undo`\n- **Skip:** If no reminders needed, don't push\n- **Fallback:** If cron fails or is unavailable, push missed reminders on next user interaction (check `last_reminder_at`, if > 24h ago then push)\n\n## Data Schema\n\nStorage file: `${workspace}/todo-list/todos.json` (`workspace` = current OpenClaw working directory)\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"Submit weekly report\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"tags\": [\"work\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:Submit weekly report before end of day\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\nField Reference:\n- `id`: Auto-increment integer, never reuse\n- `content`: Task content (text summary)\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: Deadline date YYYY-MM-DD, nullable\n- `tags`: Tag array for categorization and filtering (e.g., `[\"bug\", \"notification\"]`), can be empty\n- `created_at`: Creation time ISO 8601\n- `completed_at`: Completion time ISO 8601, set when done\n- `attachments`: `[{path, type}]` attachment list\n- `source_message`: Original message text\n- `last_reminder_at`: Last reminder time ISO 8601 (for fallback push)\n\n## Concurrency Safety\n\nUse atomic writes for todos.json: write to temp file `todos.json.tmp` first, then `mv` (rename) to replace original. Prevents data loss from concurrent session writes.\n\n## Constraints\n\n- Storage path: `${workspace}/todo-list/` (relative to current working directory)\n- Attachment path: `${workspace}/todo-list/attachments/`\n- ID auto-increments, deleted IDs are never reused\n- Do not modify original user messages\n- Delete operations require secondary confirmation\n- Time parsing precision: day-level only\n- Auto-create `todos.json` and directories if they don't exist\n- Auto-backup previous version to `todos.json.bak` before writing\n- If json parsing fails, attempt recovery from `todos.json.bak`\n- After deleting a todo, attachment files are **retained for 7 days** before cleanup (allows recovery from accidental deletion)\n- Schema upgrade: check `version` field on read; if mismatch, execute migration (e.g., add new fields with defaults) and write back\n\nFile v1.3.1:_meta.json\n\n{\n  \"ownerId\": \"kn76af6ccjftr7hsds21j60xnn82q1qd\",\n  \"slug\": \"todo-list-promax\",\n  \"version\": \"1.3.1\",\n  \"publishedAt\": 1779090411055\n}\n\nArchive v1.3.0: 2 files, 8136 bytes\n\nFiles: SKILL.md (17422b), _meta.json (135b)\n\nFile v1.3.0:SKILL.md\n\n---\nname: todo-list-promax\nversion: \"1.3.0\"\ndescription: >\n  个人待办事项永久存储、智能分类与定时提醒系统。\n  自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。\n  当用户消息包含以下触发词时激活：\n  【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备忘\"、\"提醒我\"、\"add todo\"、\"remind me to\"、\"don't forget\"、\"note this\"\n  【查询】\"TODOLIST\"、\"待办列表\"、\"查看待办\"、\"看看待办\"、\"我有哪些待办\"、\"今天还有哪些未完成\"、\"还有什么没做\"、\"今天还要干嘛\"、\"今天的事做完了没\"、\"我的清单\"、\"my todos\"、\"todo list\"、\"what's pending\"、\"show todos\"\n  NOT for: 项目管理、日历集成、多人协作、自动执行任务。\n---\n\n# todo-list — 个人待办事项系统\n\n## 语言规则\n\n**检测用户使用的语言，全程使用同一语言输出。** 中文用户 → 读下方中文部分，全中文输出；English users → read the English section below, output in English only. 技术术语（JSON、ID 等）保留原文即可。\n\n---\n\n# 中文版\n\n## 目标\n\n为用户提供一个永久不丢失的待办事项管理系统。自动从聊天消息中捕获待办，智能解析时间和优先级，每日主动提醒未完成任务。\n\n## 核心原则\n\n1. **零摩擦录入** — 用户随意发一句话或一张图，系统自动识别并存储\n2. **永久不丢** — 完成 = 标记 done，不等于删除。已删除 = 真正移除\n3. **智能解析** — 从自然语言自动提取时间、优先级、任务内容\n4. **主动提醒** — 有截止时间的未完成任务，每天 21:00 主动推送\n5. **按需响应** — 用户不问不回复，避免打扰\n\n## 主要职责\n\n### 1. 待办录入\n\n**触发词：** `TODO:`、`帮我记录一下`、`记录：`、`待办：`、`加个待办`、`记一下`、`别忘了`、`记得提醒我`、`回头要做`、`备忘`、`提醒我`、`add todo`、`remind me to`、`don't forget`、`note this`\n\n**模糊输入判定规则：** 消息必须包含**动宾结构**或**明确动作词**才能触发录入。判断标准：\n- ✅ 触发：含动词+宾语（\"提交周报\"、\"买充电线\"、\"看完论文\"）\n- ✅ 触发：含明确动作+目标（\"TODO: 部署测试环境\"）\n- ❌ 不触发：纯状态/意向陈述（\"我打算吃饭\"、\"最近好累\"、\"想学 Rust\"）\n- ❓ 模糊时：**追问而非静默录入**。如\"TODO: 搞一下那个东西\" → 回复\"你想记录什么待办？请具体说明一下任务内容\"\n\n**操作优先级**：如果同一条消息同时匹配录入和操作指令（如\"删除这个 TODO: xxx\"），优先执行操作指令（完成 > 删除 > 修改 > 录入），不创建重复待办。\n\n**矛盾请求处理**：当用户消息包含矛盾指令时（如\"完成了 #1 删除 #1\"或\"TODO: 删除所有待办\"）：\n- 操作间矛盾：按优先级执行第一个操作，忽略矛盾的第二个，并告知用户\n- 批量操作（\"删除所有\"/\"完成全部\"）：列出受影响的项目，逐条确认，不可批量静默执行\n- 越界请求（\"帮我把待办同步到飞书项目\"）：拒绝并提示\"todo-list 仅管理本地待办，不支持外部同步\"\n\n**流程：**\n1. 从用户消息中提取任务内容\n2. 如果消息包含图片/附件，下载并保存到 `${workspace}/todo-list/attachments/`\n3. 解析时间要求（如有）\n4. 解析优先级（如有）\n5. 生成唯一 ID，写入 `${workspace}/todo-list/todos.json`\n6. 回复用户确认（简洁一行：ID + 摘要 + 优先级 + 截止时间）\n\n**时间解析：**\n- 相对时间：今天、明天、后天、下周一、本周五、今晚、月底 等\n- 绝对时间：5月20日、5-20、2026/5/20 等\n- 模糊时间：尽快、ASAP、有空时 → 不设截止时间\n- 精确到\"天\"，不支持具体小时\n- 无法解析时 → 不设截止时间，不追问\n\n**优先级解析：**\n\n| 级别 | 标记方式 | 自然语言线索 |\n|------|---------|-------------|\n| P0 | `[P0]`、`⚠️` | \"很紧急\"、\"立刻\"、\"马上\"、\"必须今天\" |\n| P1 | `[P1]` 或不标 | \"重要\"、\"要做\"（默认） |\n| P2 | `[P2]`、`⚡` | \"急但不重要\"、\"顺手做\" |\n| P3 | `[P3]`、`📌` | \"有空再说\"、\"随手记一下\"、\"不急\" |\n\n无法判断时默认 P1。\n\n**附件处理：**\n- 图片/文件：下载到 `${workspace}/todo-list/attachments/{todoId}_{原文件名}`\n- json 中记录 `attachments: [{path, type}]`，type 枚举：`image`（图片）、`file`（其他文件）\n- 同时有文字和图片时，两者都存储\n\n### 2. 待办查询\n\n**触发词：** `TODOLIST`、`待办列表`、`查看待办`、`看看待办`、`我有哪些待办`、`今天还有哪些未完成`、`还有什么没做`、`今天还要干嘛`、`今天的事做完了没`、`我的清单`、`my todos`、`todo list`、`what's pending`、`show todos`\n\n**查询模式：**\n- 无条件 → 所有未完成待办，按优先级排序\n- 按日期 → \"周一的 todo\"、\"5月18日的待办\"、\"今天的\" → 筛选 `due_time` 匹配该日期的未完成项\n- 按时间范围 → \"本周\"、\"本月\" → 筛选 `due_time` 在范围内\n- 按优先级 → \"有哪些紧急的\" → 筛选特定级别\n- 按标签 → \"bug 相关的待办\" → 筛选 `tags` 包含关键词\n\n**输出格式：**\n```\n📋 未完成待办（共 X 条）\n\n🔴 P0 重要紧急\n  #1 今天下班前提交周报  📅 今天\n\n🟡 P1 重要不紧急\n  #3 看完那篇论文  📅 下周一\n  #5 整理桌面  （无截止时间）\n\n🟠 P2 急但不重要\n  #8 回复那个邮件  📅 明天\n\n🟢 P3 不急\n  #7 买个充电线  📅 有空再说\n```\n\n### 3. 待办操作\n\n**完成：** \"完成了 #1\" 或 \"TODO 完成 1\" 或 \"done #1\" → 标记 `status: done`，记录 `completed_at`\n**删除：** \"删除 #1\" 或 \"TODO 删除 1\" 或 \"delete #1\" → 回复待删除的 todo 内容摘要（ID + 内容 + 优先级），等用户确认后再移除。用户说\"确认\"或\"删\"时才执行\n**修改：** \"#1 改成明天\" 或 \"#1 change to tomorrow\" → 更新对应字段，回复确认\n\n**可修改字段：** `content`（内容）、`due_time`（截止时间）、`priority`（优先级）。语法：`#N 字段:新值`，如 `#1 截止:明天`、`#1 优先级:P0`、`#1 内容:新的任务描述`\n\n**撤销机制：** 用户说\"撤销\"或\"undo\"时，恢复最近一次操作的待办状态（从 `todos.json.bak` 读取上一版本）。仅支持撤销最近一次操作。\n\n### 4. 每日提醒\n\n- **时间：** 每天 21:00\n- **配置方式：** 使用 OpenClaw cron 功能创建每日提醒任务，或参考 `feishu-cron-reminder` skill 的配置方式。示例：每天 21:00 触发一个 session 读取 todos.json 并筛选未完成项推送。\n- **筛选：** 有 `due_time` 且 `status != done` 的待办\n- **排序：** 按优先级 P0 > P1 > P2 > P3\n- **输出：** 紧凑列表，只推未完成的。末尾附操作指引：`回复\"完成 #N\"标记完成 · 回复\"TODOLIST\"查看全部 · 回复\"#N 改成X\"修改 · 回复\"撤销\"恢复最近操作`\n- **跳过：** 如果没有需要提醒的待办，不推送\n- **降级策略：** cron 不可用或执行失败时，在下次用户交互时补充推送未提醒项（检查 `last_reminder_at`，若超过 24 小时则补推）\n\n## 数据结构\n\n存储文件：`${workspace}/todo-list/todos.json`（`workspace` 为当前 OpenClaw 工作目录）\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"提交周报\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"tags\": [\"工作\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:今天下班前提交周报\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\n字段说明：\n- `id`: 自增整数，不重复使用\n- `content`: 任务内容（纯文本摘要）\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: 截止日期 YYYY-MM-DD，可为 null\n- `tags`: 标签数组，用于分类和筛选（如 `[\"bug\", \"通知\"]`），可为空数组\n- `created_at`: 创建时间 ISO 8601\n- `completed_at`: 完成时间 ISO 8601，完成时填入\n- `attachments`: `[{path, type}]` 附件列表\n- `source_message`: 原始消息内容\n- `last_reminder_at`: 上次提醒时间 ISO 8601（用于降级补推）\n\n## 并发安全\n\n写入 todos.json 时采用原子写模式：先写入临时文件 `todos.json.tmp`，写入成功后 `mv`（rename）替换原文件。避免两个 session 同时写导致数据丢失。\n\n## 约束\n\n- 存储路径：`${workspace}/todo-list/`（相对于当前工作目录）\n- 附件路径：`${workspace}/todo-list/attachments/`\n- ID 自增，已删除的 ID 不重复使用\n- 不修改用户消息原文\n- 删除操作必须二次确认\n- 时间解析精确到天\n- `todos.json` 或目录不存在时自动创建\n- 写入 json 前自动备份上一版本到 `todos.json.bak`\n- 读取 json 解析失败时，尝试使用 `todos.json.bak` 恢复\n- 删除 todo 后，attachments 目录中的文件**保留 7 天**后清理（避免误删后无法恢复）\n- Schema 升级：读取时检查 `version` 字段，若不匹配当前版本，执行迁移（如新增字段填默认值）并写回\n\n---\n---\n\n# English Version\n\n## Goal\n\nProvide a permanent, loss-proof todo management system. Auto-capture todos from chat messages, parse time & priority intelligently, and proactively remind daily.\n\n## Core Principles\n\n1. **Zero-friction input** — User sends a casual message or image, system auto-identifies and stores\n2. **Permanent storage** — Done = mark as done, not delete. Deleted = actually removed\n3. **Smart parsing** — Auto-extract time, priority, and task content from natural language\n4. **Proactive reminders** — Unfinished tasks with deadlines get a daily push at 21:00\n5. **On-demand response** — Don't reply unless asked, avoid disturbance\n\n## Responsibilities\n\n### 1. Todo Capture\n\n**Triggers:** `TODO:`, `add todo`, `remind me to`, `don't forget`, `note this`, `帮我记录一下`, `待办：`, `记一下`, `备忘`, `提醒我`\n\n**Fuzzy input rules:** Message must contain a **verb-object structure** or **clear action word** to trigger. Criteria:\n- ✅ Trigger: verb + object (\"submit report\", \"buy cable\", \"read paper\")\n- ✅ Trigger: clear action + target (\"TODO: deploy test environment\")\n- ❌ No trigger: pure state/intention (\"I plan to eat\", \"tired lately\", \"want to learn Rust\")\n- ❓ Ambiguous: **Ask instead of silently capturing.** E.g., \"TODO: handle that thing\" → reply \"What todo would you like to record? Please specify the task\"\n\n**Operation priority:** If a single message matches both capture and operation triggers, prioritize the operation (complete > delete > modify > capture), do not create duplicates.\n\n**Contradiction handling:** When user message contains conflicting instructions (e.g., \"completed #1 delete #1\" or \"TODO: delete all\"):\n- Operation conflicts: execute the first by priority, ignore the conflicting second, inform user\n- Batch operations (\"delete all\"/\"complete all\"): list affected items, confirm one by one, no silent batch execution\n- Out-of-scope requests (\"sync todos to Feishu\"): reject with \"todo-list only manages local todos, no external sync\"\n\n**Flow:**\n1. Extract task content from user message\n2. If message contains images/attachments, download and save to `${workspace}/todo-list/attachments/`\n3. Parse time requirements (if any)\n4. Parse priority (if any)\n5. Generate unique ID, write to `${workspace}/todo-list/todos.json`\n6. Reply with confirmation (concise one-liner: ID + summary + priority + deadline)\n\n**Time Parsing:**\n- Relative: today, tomorrow, day after tomorrow, next Monday, this Friday, tonight, end of month, etc.\n- Absolute: May 20, 5-20, 2026/5/20, etc.\n- Vague: ASAP, when free, whenever → no deadline set\n- Precision: day-level only, no specific hours\n- Unparseable → no deadline, no follow-up questions\n\n**Priority Parsing:**\n\n| Level | Markers | Natural Language Cues |\n|-------|---------|-----------------------|\n| P0 | `[P0]`, `⚠️` | \"urgent\", \"immediately\", \"right now\", \"must do today\" |\n| P1 | `[P1]` or unmarked | \"important\", \"need to do\" (default) |\n| P2 | `[P2]`, `⚡` | \"urgent but not important\", \"quick one\" |\n| P3 | `[P3]`, `📌` | \"no rush\", \"note to self\", \"whenever\" |\n\nDefault to P1 when unclear.\n\n**Attachment Handling:**\n- Images/files: download to `${workspace}/todo-list/attachments/{todoId}_{original_filename}`\n- Record in json: `attachments: [{path, type}]`, type enum: `image` (images), `file` (other files)\n- When both text and images are present, store both\n\n### 2. Todo Query\n\n**Triggers:** `TODOLIST`, `my todos`, `todo list`, `what's pending`, `show todos`, `待办列表`, `查看待办`, `我有哪些待办`, `还有什么没做`, `我的清单`\n\n**Query Modes:**\n- No filter → all pending todos, sorted by priority\n- By date → \"Monday's todos\", \"May 18 todos\", \"today's\" → filter `due_time` matching that date\n- By time range → \"this week\", \"this month\" → filter `due_time` within range\n- By priority → todos at a specific level (e.g., \"what's urgent\")\n- By tag → \"bug-related todos\" → filter `tags` containing the keyword\n\n**Output Format:**\n```\n📋 Pending Todos (X total)\n\n🔴 P0 Urgent & Important\n  #1 Submit weekly report before end of day  📅 Today\n\n🟡 P1 Important\n  #3 Read that paper  📅 Next Monday\n  #5 Clean up desk  (No deadline)\n\n🟠 P2 Urgent but not important\n  #8 Reply to that email  📅 Tomorrow\n\n🟢 P3 No Rush\n  #7 Buy a charging cable  📅 Whenever\n```\n\n### 3. Todo Operations\n\n**Complete:** \"完成了 #1\" or \"TODO 完成 1\" or \"done #1\" → mark `status: done`, record `completed_at`\n**Delete:** \"删除 #1\" or \"TODO 删除 1\" or \"delete #1\" → reply with the todo's summary, wait for user confirmation. Execute only when user says \"确认\" or \"删\"\n**Modify:** \"#1 改成明天\" or \"#1 change to tomorrow\" → update the corresponding field, reply with confirmation\n\n**Modifiable fields:** `content`, `due_time`, `priority`. Syntax: `#N field:new_value`, e.g., `#1 截止:明天`, `#1 优先级:P0`, `#1 内容:new task description`\n\n**Undo:** When user says \"撤销\" or \"undo\", restore the todo state from the previous version (`todos.json.bak`). Only the most recent operation can be undone.\n\n### 4. Daily Reminder\n\n- **Time:** Every day at 21:00\n- **Setup:** Use OpenClaw cron or `feishu-cron-reminder` skill. Example: trigger a session at 21:00 daily that reads todos.json and filters pending items.\n- **Filter:** Items with `due_time` and `status != done`\n- **Sort:** By priority P0 > P1 > P2 > P3\n- **Output:** Compact list, only pending items. Append action guide: `Reply \"完成 #N\" to mark done · Reply \"TODOLIST\" to view all · Reply \"#N 改成X\" to modify · Reply \"撤销\" to undo`\n- **Skip:** If no reminders needed, don't push\n- **Fallback:** If cron fails or is unavailable, push missed reminders on next user interaction (check `last_reminder_at`, if > 24h ago then push)\n\n## Data Schema\n\nStorage file: `${workspace}/todo-list/todos.json` (`workspace` = current OpenClaw working directory)\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"Submit weekly report\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"tags\": [\"work\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:Submit weekly report before end of day\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\nField Reference:\n- `id`: Auto-increment integer, never reuse\n- `content`: Task content (text summary)\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: Deadline date YYYY-MM-DD, nullable\n- `tags`: Tag array for categorization and filtering (e.g., `[\"bug\", \"notification\"]`), can be empty\n- `created_at`: Creation time ISO 8601\n- `completed_at`: Completion time ISO 8601, set when done\n- `attachments`: `[{path, type}]` attachment list\n- `source_message`: Original message text\n- `last_reminder_at`: Last reminder time ISO 8601 (for fallback push)\n\n## Concurrency Safety\n\nUse atomic writes for todos.json: write to temp file `todos.json.tmp` first, then `mv` (rename) to replace original. Prevents data loss from concurrent session writes.\n\n## Constraints\n\n- Storage path: `${workspace}/todo-list/` (relative to current working directory)\n- Attachment path: `${workspace}/todo-list/attachments/`\n- ID auto-increments, deleted IDs are never reused\n- Do not modify original user messages\n- Delete operations require secondary confirmation\n- Time parsing precision: day-level only\n- Auto-create `todos.json` and directories if they don't exist\n- Auto-backup previous version to `todos.json.bak` before writing\n- If json parsing fails, attempt recovery from `todos.json.bak`\n- After deleting a todo, attachment files are **retained for 7 days** before cleanup (allows recovery from accidental deletion)\n- Schema upgrade: check `version` field on read; if mismatch, execute migration (e.g., add new fields with defaults) and write back\n\nFile v1.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn76af6ccjftr7hsds21j60xnn82q1qd\",\n  \"slug\": \"todo-list-promax\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1779090270180\n}\n\nArchive v0.1.110: 2 files, 8137 bytes\n\nFiles: SKILL.md (17422b), _meta.json (137b)\n\nFile v0.1.110:SKILL.md\n\n---\nname: todo-list-promax\nversion: \"1.3.0\"\ndescription: >\n  个人待办事项永久存储、智能分类与定时提醒系统。\n  自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。\n  当用户消息包含以下触发词时激活：\n  【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备忘\"、\"提醒我\"、\"add todo\"、\"remind me to\"、\"don't forget\"、\"note this\"\n  【查询】\"TODOLIST\"、\"待办列表\"、\"查看待办\"、\"看看待办\"、\"我有哪些待办\"、\"今天还有哪些未完成\"、\"还有什么没做\"、\"今天还要干嘛\"、\"今天的事做完了没\"、\"我的清单\"、\"my todos\"、\"todo list\"、\"what's pending\"、\"show todos\"\n  NOT for: 项目管理、日历集成、多人协作、自动执行任务。\n---\n\n# todo-list — 个人待办事项系统\n\n## 语言规则\n\n**检测用户使用的语言，全程使用同一语言输出。** 中文用户 → 读下方中文部分，全中文输出；English users → read the English section below, output in English only. 技术术语（JSON、ID 等）保留原文即可。\n\n---\n\n# 中文版\n\n## 目标\n\n为用户提供一个永久不丢失的待办事项管理系统。自动从聊天消息中捕获待办，智能解析时间和优先级，每日主动提醒未完成任务。\n\n## 核心原则\n\n1. **零摩擦录入** — 用户随意发一句话或一张图，系统自动识别并存储\n2. **永久不丢** — 完成 = 标记 done，不等于删除。已删除 = 真正移除\n3. **智能解析** — 从自然语言自动提取时间、优先级、任务内容\n4. **主动提醒** — 有截止时间的未完成任务，每天 21:00 主动推送\n5. **按需响应** — 用户不问不回复，避免打扰\n\n## 主要职责\n\n### 1. 待办录入\n\n**触发词：** `TODO:`、`帮我记录一下`、`记录：`、`待办：`、`加个待办`、`记一下`、`别忘了`、`记得提醒我`、`回头要做`、`备忘`、`提醒我`、`add todo`、`remind me to`、`don't forget`、`note this`\n\n**模糊输入判定规则：** 消息必须包含**动宾结构**或**明确动作词**才能触发录入。判断标准：\n- ✅ 触发：含动词+宾语（\"提交周报\"、\"买充电线\"、\"看完论文\"）\n- ✅ 触发：含明确动作+目标（\"TODO: 部署测试环境\"）\n- ❌ 不触发：纯状态/意向陈述（\"我打算吃饭\"、\"最近好累\"、\"想学 Rust\"）\n- ❓ 模糊时：**追问而非静默录入**。如\"TODO: 搞一下那个东西\" → 回复\"你想记录什么待办？请具体说明一下任务内容\"\n\n**操作优先级**：如果同一条消息同时匹配录入和操作指令（如\"删除这个 TODO: xxx\"），优先执行操作指令（完成 > 删除 > 修改 > 录入），不创建重复待办。\n\n**矛盾请求处理**：当用户消息包含矛盾指令时（如\"完成了 #1 删除 #1\"或\"TODO: 删除所有待办\"）：\n- 操作间矛盾：按优先级执行第一个操作，忽略矛盾的第二个，并告知用户\n- 批量操作（\"删除所有\"/\"完成全部\"）：列出受影响的项目，逐条确认，不可批量静默执行\n- 越界请求（\"帮我把待办同步到飞书项目\"）：拒绝并提示\"todo-list 仅管理本地待办，不支持外部同步\"\n\n**流程：**\n1. 从用户消息中提取任务内容\n2. 如果消息包含图片/附件，下载并保存到 `${workspace}/todo-list/attachments/`\n3. 解析时间要求（如有）\n4. 解析优先级（如有）\n5. 生成唯一 ID，写入 `${workspace}/todo-list/todos.json`\n6. 回复用户确认（简洁一行：ID + 摘要 + 优先级 + 截止时间）\n\n**时间解析：**\n- 相对时间：今天、明天、后天、下周一、本周五、今晚、月底 等\n- 绝对时间：5月20日、5-20、2026/5/20 等\n- 模糊时间：尽快、ASAP、有空时 → 不设截止时间\n- 精确到\"天\"，不支持具体小时\n- 无法解析时 → 不设截止时间，不追问\n\n**优先级解析：**\n\n| 级别 | 标记方式 | 自然语言线索 |\n|------|---------|-------------|\n| P0 | `[P0]`、`⚠️` | \"很紧急\"、\"立刻\"、\"马上\"、\"必须今天\" |\n| P1 | `[P1]` 或不标 | \"重要\"、\"要做\"（默认） |\n| P2 | `[P2]`、`⚡` | \"急但不重要\"、\"顺手做\" |\n| P3 | `[P3]`、`📌` | \"有空再说\"、\"随手记一下\"、\"不急\" |\n\n无法判断时默认 P1。\n\n**附件处理：**\n- 图片/文件：下载到 `${workspace}/todo-list/attachments/{todoId}_{原文件名}`\n- json 中记录 `attachments: [{path, type}]`，type 枚举：`image`（图片）、`file`（其他文件）\n- 同时有文字和图片时，两者都存储\n\n### 2. 待办查询\n\n**触发词：** `TODOLIST`、`待办列表`、`查看待办`、`看看待办`、`我有哪些待办`、`今天还有哪些未完成`、`还有什么没做`、`今天还要干嘛`、`今天的事做完了没`、`我的清单`、`my todos`、`todo list`、`what's pending`、`show todos`\n\n**查询模式：**\n- 无条件 → 所有未完成待办，按优先级排序\n- 按日期 → \"周一的 todo\"、\"5月18日的待办\"、\"今天的\" → 筛选 `due_time` 匹配该日期的未完成项\n- 按时间范围 → \"本周\"、\"本月\" → 筛选 `due_time` 在范围内\n- 按优先级 → \"有哪些紧急的\" → 筛选特定级别\n- 按标签 → \"bug 相关的待办\" → 筛选 `tags` 包含关键词\n\n**输出格式：**\n```\n📋 未完成待办（共 X 条）\n\n🔴 P0 重要紧急\n  #1 今天下班前提交周报  📅 今天\n\n🟡 P1 重要不紧急\n  #3 看完那篇论文  📅 下周一\n  #5 整理桌面  （无截止时间）\n\n🟠 P2 急但不重要\n  #8 回复那个邮件  📅 明天\n\n🟢 P3 不急\n  #7 买个充电线  📅 有空再说\n```\n\n### 3. 待办操作\n\n**完成：** \"完成了 #1\" 或 \"TODO 完成 1\" 或 \"done #1\" → 标记 `status: done`，记录 `completed_at`\n**删除：** \"删除 #1\" 或 \"TODO 删除 1\" 或 \"delete #1\" → 回复待删除的 todo 内容摘要（ID + 内容 + 优先级），等用户确认后再移除。用户说\"确认\"或\"删\"时才执行\n**修改：** \"#1 改成明天\" 或 \"#1 change to tomorrow\" → 更新对应字段，回复确认\n\n**可修改字段：** `content`（内容）、`due_time`（截止时间）、`priority`（优先级）。语法：`#N 字段:新值`，如 `#1 截止:明天`、`#1 优先级:P0`、`#1 内容:新的任务描述`\n\n**撤销机制：** 用户说\"撤销\"或\"undo\"时，恢复最近一次操作的待办状态（从 `todos.json.bak` 读取上一版本）。仅支持撤销最近一次操作。\n\n### 4. 每日提醒\n\n- **时间：** 每天 21:00\n- **配置方式：** 使用 OpenClaw cron 功能创建每日提醒任务，或参考 `feishu-cron-reminder` skill 的配置方式。示例：每天 21:00 触发一个 session 读取 todos.json 并筛选未完成项推送。\n- **筛选：** 有 `due_time` 且 `status != done` 的待办\n- **排序：** 按优先级 P0 > P1 > P2 > P3\n- **输出：** 紧凑列表，只推未完成的。末尾附操作指引：`回复\"完成 #N\"标记完成 · 回复\"TODOLIST\"查看全部 · 回复\"#N 改成X\"修改 · 回复\"撤销\"恢复最近操作`\n- **跳过：** 如果没有需要提醒的待办，不推送\n- **降级策略：** cron 不可用或执行失败时，在下次用户交互时补充推送未提醒项（检查 `last_reminder_at`，若超过 24 小时则补推）\n\n## 数据结构\n\n存储文件：`${workspace}/todo-list/todos.json`（`workspace` 为当前 OpenClaw 工作目录）\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"提交周报\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"tags\": [\"工作\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:今天下班前提交周报\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\n字段说明：\n- `id`: 自增整数，不重复使用\n- `content`: 任务内容（纯文本摘要）\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: 截止日期 YYYY-MM-DD，可为 null\n- `tags`: 标签数组，用于分类和筛选（如 `[\"bug\", \"通知\"]`），可为空数组\n- `created_at`: 创建时间 ISO 8601\n- `completed_at`: 完成时间 ISO 8601，完成时填入\n- `attachments`: `[{path, type}]` 附件列表\n- `source_message`: 原始消息内容\n- `last_reminder_at`: 上次提醒时间 ISO 8601（用于降级补推）\n\n## 并发安全\n\n写入 todos.json 时采用原子写模式：先写入临时文件 `todos.json.tmp`，写入成功后 `mv`（rename）替换原文件。避免两个 session 同时写导致数据丢失。\n\n## 约束\n\n- 存储路径：`${workspace}/todo-list/`（相对于当前工作目录）\n- 附件路径：`${workspace}/todo-list/attachments/`\n- ID 自增，已删除的 ID 不重复使用\n- 不修改用户消息原文\n- 删除操作必须二次确认\n- 时间解析精确到天\n- `todos.json` 或目录不存在时自动创建\n- 写入 json 前自动备份上一版本到 `todos.json.bak`\n- 读取 json 解析失败时，尝试使用 `todos.json.bak` 恢复\n- 删除 todo 后，attachments 目录中的文件**保留 7 天**后清理（避免误删后无法恢复）\n- Schema 升级：读取时检查 `version` 字段，若不匹配当前版本，执行迁移（如新增字段填默认值）并写回\n\n---\n---\n\n# English Version\n\n## Goal\n\nProvide a permanent, loss-proof todo management system. Auto-capture todos from chat messages, parse time & priority intelligently, and proactively remind daily.\n\n## Core Principles\n\n1. **Zero-friction input** — User sends a casual message or image, system auto-identifies and stores\n2. **Permanent storage** — Done = mark as done, not delete. Deleted = actually removed\n3. **Smart parsing** — Auto-extract time, priority, and task content from natural language\n4. **Proactive reminders** — Unfinished tasks with deadlines get a daily push at 21:00\n5. **On-demand response** — Don't reply unless asked, avoid disturbance\n\n## Responsibilities\n\n### 1. Todo Capture\n\n**Triggers:** `TODO:`, `add todo`, `remind me to`, `don't forget`, `note this`, `帮我记录一下`, `待办：`, `记一下`, `备忘`, `提醒我`\n\n**Fuzzy input rules:** Message must contain a **verb-object structure** or **clear action word** to trigger. Criteria:\n- ✅ Trigger: verb + object (\"submit report\", \"buy cable\", \"read paper\")\n- ✅ Trigger: clear action + target (\"TODO: deploy test environment\")\n- ❌ No trigger: pure state/intention (\"I plan to eat\", \"tired lately\", \"want to learn Rust\")\n- ❓ Ambiguous: **Ask instead of silently capturing.** E.g., \"TODO: handle that thing\" → reply \"What todo would you like to record? Please specify the task\"\n\n**Operation priority:** If a single message matches both capture and operation triggers, prioritize the operation (complete > delete > modify > capture), do not create duplicates.\n\n**Contradiction handling:** When user message contains conflicting instructions (e.g., \"completed #1 delete #1\" or \"TODO: delete all\"):\n- Operation conflicts: execute the first by priority, ignore the conflicting second, inform user\n- Batch operations (\"delete all\"/\"complete all\"): list affected items, confirm one by one, no silent batch execution\n- Out-of-scope requests (\"sync todos to Feishu\"): reject with \"todo-list only manages local todos, no external sync\"\n\n**Flow:**\n1. Extract task content from user message\n2. If message contains images/attachments, download and save to `${workspace}/todo-list/attachments/`\n3. Parse time requirements (if any)\n4. Parse priority (if any)\n5. Generate unique ID, write to `${workspace}/todo-list/todos.json`\n6. Reply with confirmation (concise one-liner: ID + summary + priority + deadline)\n\n**Time Parsing:**\n- Relative: today, tomorrow, day after tomorrow, next Monday, this Friday, tonight, end of month, etc.\n- Absolute: May 20, 5-20, 2026/5/20, etc.\n- Vague: ASAP, when free, whenever → no deadline set\n- Precision: day-level only, no specific hours\n- Unparseable → no deadline, no follow-up questions\n\n**Priority Parsing:**\n\n| Level | Markers | Natural Language Cues |\n|-------|---------|-----------------------|\n| P0 | `[P0]`, `⚠️` | \"urgent\", \"immediately\", \"right now\", \"must do today\" |\n| P1 | `[P1]` or unmarked | \"important\", \"need to do\" (default) |\n| P2 | `[P2]`, `⚡` | \"urgent but not important\", \"quick one\" |\n| P3 | `[P3]`, `📌` | \"no rush\", \"note to self\", \"whenever\" |\n\nDefault to P1 when unclear.\n\n**Attachment Handling:**\n- Images/files: download to `${workspace}/todo-list/attachments/{todoId}_{original_filename}`\n- Record in json: `attachments: [{path, type}]`, type enum: `image` (images), `file` (other files)\n- When both text and images are present, store both\n\n### 2. Todo Query\n\n**Triggers:** `TODOLIST`, `my todos`, `todo list`, `what's pending`, `show todos`, `待办列表`, `查看待办`, `我有哪些待办`, `还有什么没做`, `我的清单`\n\n**Query Modes:**\n- No filter → all pending todos, sorted by priority\n- By date → \"Monday's todos\", \"May 18 todos\", \"today's\" → filter `due_time` matching that date\n- By time range → \"this week\", \"this month\" → filter `due_time` within range\n- By priority → todos at a specific level (e.g., \"what's urgent\")\n- By tag → \"bug-related todos\" → filter `tags` containing the keyword\n\n**Output Format:**\n```\n📋 Pending Todos (X total)\n\n🔴 P0 Urgent & Important\n  #1 Submit weekly report before end of day  📅 Today\n\n🟡 P1 Important\n  #3 Read that paper  📅 Next Monday\n  #5 Clean up desk  (No deadline)\n\n🟠 P2 Urgent but not important\n  #8 Reply to that email  📅 Tomorrow\n\n🟢 P3 No Rush\n  #7 Buy a charging cable  📅 Whenever\n```\n\n### 3. Todo Operations\n\n**Complete:** \"完成了 #1\" or \"TODO 完成 1\" or \"done #1\" → mark `status: done`, record `completed_at`\n**Delete:** \"删除 #1\" or \"TODO 删除 1\" or \"delete #1\" → reply with the todo's summary, wait for user confirmation. Execute only when user says \"确认\" or \"删\"\n**Modify:** \"#1 改成明天\" or \"#1 change to tomorrow\" → update the corresponding field, reply with confirmation\n\n**Modifiable fields:** `content`, `due_time`, `priority`. Syntax: `#N field:new_value`, e.g., `#1 截止:明天`, `#1 优先级:P0`, `#1 内容:new task description`\n\n**Undo:** When user says \"撤销\" or \"undo\", restore the todo state from the previous version (`todos.json.bak`). Only the most recent operation can be undone.\n\n### 4. Daily Reminder\n\n- **Time:** Every day at 21:00\n- **Setup:** Use OpenClaw cron or `feishu-cron-reminder` skill. Example: trigger a session at 21:00 daily that reads todos.json and filters pending items.\n- **Filter:** Items with `due_time` and `status != done`\n- **Sort:** By priority P0 > P1 > P2 > P3\n- **Output:** Compact list, only pending items. Append action guide: `Reply \"完成 #N\" to mark done · Reply \"TODOLIST\" to view all · Reply \"#N 改成X\" to modify · Reply \"撤销\" to undo`\n- **Skip:** If no reminders needed, don't push\n- **Fallback:** If cron fails or is unavailable, push missed reminders on next user interaction (check `last_reminder_at`, if > 24h ago then push)\n\n## Data Schema\n\nStorage file: `${workspace}/todo-list/todos.json` (`workspace` = current OpenClaw working directory)\n\n```json\n{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"Submit weekly report\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"tags\": [\"work\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:Submit weekly report before end of day\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\nField Reference:\n- `id`: Auto-increment integer, never reuse\n- `content`: Task content (text summary)\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: Deadline date YYYY-MM-DD, nullable\n- `tags`: Tag array for categorization and filtering (e.g., `[\"bug\", \"notification\"]`), can be empty\n- `created_at`: Creation time ISO 8601\n- `completed_at`: Completion time ISO 8601, set when done\n- `attachments`: `[{path, type}]` attachment list\n- `source_message`: Original message text\n- `last_reminder_at`: Last reminder time ISO 8601 (for fallback push)\n\n## Concurrency Safety\n\nUse atomic writes for todos.json: write to temp file `todos.json.tmp` first, then `mv` (rename) to replace original. Prevents data loss from concurrent session writes.\n\n## Constraints\n\n- Storage path: `${workspace}/todo-list/` (relative to current working directory)\n- Attachment path: `${workspace}/todo-list/attachments/`\n- ID auto-increments, deleted IDs are never reused\n- Do not modify original user messages\n- Delete operations require secondary confirmation\n- Time parsing precision: day-level only\n- Auto-create `todos.json` and directories if they don't exist\n- Auto-backup previous version to `todos.json.bak` before writing\n- If json parsing fails, attempt recovery from `todos.json.bak`\n- After deleting a todo, attachment files are **retained for 7 days** before cleanup (allows recovery from accidental deletion)\n- Schema upgrade: check `version` field on read; if mismatch, execute migration (e.g., add new fields with defaults) and write back\n\nFile v0.1.110:_meta.json\n\n{\n  \"ownerId\": \"kn76af6ccjftr7hsds21j60xnn82q1qd\",\n  \"slug\": \"todo-list-promax\",\n  \"version\": \"0.1.110\",\n  \"publishedAt\": 1779013227837\n}\n\nArchive v1.2.0: 2 files, 7736 bytes\n\nFiles: SKILL.md (16485b), _meta.json (135b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: todo-list-promax\nversion: \"1.2.0\"\ndescription: >\n  个人待办事项永久存储、智能分类与定时提醒系统。\n  自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。\n  当用户消息包含以下触发词时激活：\n  【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备忘\"、\"提醒我\"\n  【查询】\"TODOLIST\"、\"待办列表\"、\"查看待办\"、\"看看待办\"、\"我有哪些待办\"、\"今天还有哪些未完成\"、\"还有什么没做\"、\"今天还要干嘛\"、\"今天的事做完了没\"、\"我的清单\"\n  NOT for: 项目管理、日历集成、多人协作、自动执行任务。\n---\n\n# todo-list — 个人待办事项系统\n\n## 语言规则\n\n**检测用户使用的语言，全程使用同一语言输出。** 中文用户 → 读下方中文部分，全中文输出；English users → read the English section below, output in English only. 技术术语（JSON、ID 等）保留原文即可。\n\n---\n\n# 中文版\n\n## 目标\n\n为用户提供一个永久不丢失的待办事项管理系统。自动从聊天消息中捕获待办，智能解析时间和优先级，每日主动提醒未完成任务。\n\n## 核心原则\n\n1. **零摩擦录入** — 用户随意发一句话或一张图，系统自动识别并存储\n2. **永久不丢** — 完成 = 标记 done，不等于删除。已删除 = 真正移除\n3. **智能解析** — 从自然语言自动提取时间、优先级、任务内容\n4. **主动提醒** — 有截止时间的未完成任务，每天 21:00 主动推送\n5. **按需响应** — 用户不问不回复，避免打扰\n\n## 主要职责\n\n### 1. 待办录入\n\n**触发词：** `TODO:`、`帮我记录一下`、`记录：`、`待办：`、`加个待办`、`记一下`、`别忘了`、`记得提醒我`、`回头要做`、`备忘`、`提醒我`\n\n**模糊输入判定规则：** 消息必须包含**动宾结构**或**明确动作词**才能触发录入。判断标准：\n- ✅ 触发：含动词+宾语（\"提交周报\"、\"买充电线\"、\"看完论文\"）\n- ✅ 触发：含明确动作+目标（\"TODO: 部署测试环境\"）\n- ❌ 不触发：纯状态/意向陈述（\"我打算吃饭\"、\"最近好累\"、\"想学 Rust\"）\n- ❓ 模糊时：**追问而非静默录入**。如\"TODO: 搞一下那个东西\" → 回复\"你想记录什么待办？请具体说明一下任务内容\"\n\n**操作优先级**：如果同一条消息同时匹配录入和操作指令（如\"删除这个 TODO: xxx\"），优先执行操作指令（完成 > 删除 > 修改 > 录入），不创建重复待办。\n\n**矛盾请求处理**：当用户消息包含矛盾指令时（如\"完成了 #1 删除 #1\"或\"TODO: 删除所有待办\"）：\n- 操作间矛盾：按优先级执行第一个操作，忽略矛盾的第二个，并告知用户\n- 批量操作（\"删除所有\"/\"完成全部\"）：列出受影响的项目，逐条确认，不可批量静默执行\n- 越界请求（\"帮我把待办同步到飞书项目\"）：拒绝并提示\"todo-list 仅管理本地待办，不支持外部同步\"\n\n**流程：**\n1. 从用户消息中提取任务内容\n2. 如果消息包含图片/附件，下载并保存到 `${workspace}/todo-list/attachments/`\n3. 解析时间要求（如有）\n4. 解析优先级（如有）\n5. 生成唯一 ID，写入 `${workspace}/todo-list/todos.json`\n6. 回复用户确认（简洁一行：ID + 摘要 + 优先级 + 截止时间）\n\n**时间解析：**\n- 相对时间：今天、明天、后天、下周一、本周五、今晚、月底 等\n- 绝对时间：5月20日、5-20、2026/5/20 等\n- 模糊时间：尽快、ASAP、有空时 → 不设截止时间\n- 精确到\"天\"，不支持具体小时\n- 无法解析时 → 不设截止时间，不追问\n\n**优先级解析：**\n\n| 级别 | 标记方式 | 自然语言线索 |\n|------|---------|-------------|\n| P0 | `[P0]`、`⚠️` | \"很紧急\"、\"立刻\"、\"马上\"、\"必须今天\" |\n| P1 | `[P1]` 或不标 | \"重要\"、\"要做\"（默认） |\n| P2 | `[P2]`、`⚡` | \"急但不重要\"、\"顺手做\" |\n| P3 | `[P3]`、`📌` | \"有空再说\"、\"随手记一下\"、\"不急\" |\n\n无法判断时默认 P1。\n\n**附件处理：**\n- 图片/文件：下载到 `${workspace}/todo-list/attachments/{todoId}_{原文件名}`\n- json 中记录 `attachments: [{path, type}]`，type 枚举：`image`（图片）、`file`（其他文件）\n- 同时有文字和图片时，两者都存储\n\n### 2. 待办查询\n\n**触发词：** `TODOLIST`、`待办列表`、`查看待办`、`看看待办`、`我有哪些待办`、`今天还有哪些未完成`、`还有什么没做`、`今天还要干嘛`、`今天的事做完了没`、`我的清单`。\n\n**查询模式：**\n- 无条件 → 所有未完成待办，按优先级排序\n- 按时间 → 今天/本周/本月到期的未完成待办\n- 按优先级 → 某个级别的待办（如\"有哪些紧急的\"）\n\n**输出格式：**\n```\n📋 未完成待办（共 X 条）\n\n🔴 P0 重要紧急\n  #1 今天下班前提交周报  📅 今天\n\n🟡 P1 重要不紧急\n  #3 看完那篇论文  📅 下周一\n  #5 整理桌面  （无截止时间）\n\n🟠 P2 急但不重要\n  #8 回复那个邮件  📅 明天\n\n🟢 P3 不急\n  #7 买个充电线  📅 有空再说\n```\n\n### 3. 待办操作\n\n**完成：** \"完成了 #1\" 或 \"TODO 完成 1\" → 标记 `status: done`，记录 `completed_at`\n**删除：** \"删除 #1\" 或 \"TODO 删除 1\" → 回复待删除的 todo 内容摘要（ID + 内容 + 优先级），等用户确认后再移除。用户说\"确认\"或\"删\"时才执行\n**修改：** \"#1 改成明天\" → 更新对应字段，回复确认\n\n**可修改字段：** `content`（内容）、`due_time`（截止时间）、`priority`（优先级）。语法：`#N 字段:新值`，如 `#1 截止:明天`、`#1 优先级:P0`、`#1 内容:新的任务描述`\n\n**撤销机制：** 用户说\"撤销\"或\"undo\"时，恢复最近一次操作的待办状态（从 `todos.json.bak` 读取上一版本）。仅支持撤销最近一次操作。\n\n### 4. 每日提醒\n\n- **时间：** 每天 21:00\n- **配置方式：** 使用 OpenClaw cron 功能创建每日提醒任务，或参考 `feishu-cron-reminder` skill 的配置方式。示例：每天 21:00 触发一个 session 读取 todos.json 并筛选未完成项推送。\n- **筛选：** 有 `due_time` 且 `status != done` 的待办\n- **排序：** 按优先级 P0 > P1 > P2 > P3\n- **输出：** 紧凑列表，只推未完成的。末尾附操作指引：`回复\"完成 #N\"标记完成 · 回复\"TODOLIST\"查看全部 · 回复\"#N 改成X\"修改 · 回复\"撤销\"恢复最近操作`\n- **跳过：** 如果没有需要提醒的待办，不推送\n- **降级策略：** cron 不可用或执行失败时，在下次用户交互时补充推送未提醒项（检查 `last_reminder_at`，若超过 24 小时则补推）\n\n## 数据结构\n\n存储文件：`${workspace}/todo-list/todos.json`（`workspace` 为当前 OpenClaw 工作目录）\n\n```json\n{\n  \"version\": 1,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"提交周报\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:今天下班前提交周报\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\n字段说明：\n- `id`: 自增整数，不重复使用\n- `content`: 任务内容（纯文本摘要）\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: 截止日期 YYYY-MM-DD，可为 null\n- `created_at`: 创建时间 ISO 8601\n- `completed_at`: 完成时间 ISO 8601，完成时填入\n- `attachments`: `[{path, type}]` 附件列表\n- `source_message`: 原始消息内容\n- `last_reminder_at`: 上次提醒时间 ISO 8601（用于降级补推）\n\n## 并发安全\n\n写入 todos.json 时采用原子写模式：先写入临时文件 `todos.json.tmp`，写入成功后 `mv`（rename）替换原文件。避免两个 session 同时写导致数据丢失。\n\n## 约束\n\n- 存储路径：`${workspace}/todo-list/`（相对于当前工作目录）\n- 附件路径：`${workspace}/todo-list/attachments/`\n- ID 自增，已删除的 ID 不重复使用\n- 不修改用户消息原文\n- 删除操作必须二次确认\n- 时间解析精确到天\n- `todos.json` 或目录不存在时自动创建\n- 写入 json 前自动备份上一版本到 `todos.json.bak`\n- 读取 json 解析失败时，尝试使用 `todos.json.bak` 恢复\n- 删除 todo 后，attachments 目录中的文件**保留 7 天**后清理（避免误删后无法恢复）\n- Schema 升级：读取时检查 `version` 字段，若不匹配当前版本，执行迁移（如新增字段填默认值）并写回\n\n---\n---\n\n# English Version\n\n## Goal\n\nProvide a permanent, loss-proof todo management system. Auto-capture todos from chat messages, parse time & priority intelligently, and proactively remind daily.\n\n## Core Principles\n\n1. **Zero-friction input** — User sends a casual message or image, system auto-identifies and stores\n2. **Permanent storage** — Done = mark as done, not delete. Deleted = actually removed\n3. **Smart parsing** — Auto-extract time, priority, and task content from natural language\n4. **Proactive reminders** — Unfinished tasks with deadlines get a daily push at 21:00\n5. **On-demand response** — Don't reply unless asked, avoid disturbance\n\n## Responsibilities\n\n### 1. Todo Capture\n\n**Triggers:** `TODO:`, `帮我记录一下`, `记录：`, `待办：`, `加个待办`, `记一下`, `别忘了`, `记得提醒我`, `回头要做`, `备忘`, `提醒我`\n\n**Fuzzy input rules:** Message must contain a **verb-object structure** or **clear action word** to trigger. Criteria:\n- ✅ Trigger: verb + object (\"submit report\", \"buy cable\", \"read paper\")\n- ✅ Trigger: clear action + target (\"TODO: deploy test environment\")\n- ❌ No trigger: pure state/intention (\"I plan to eat\", \"tired lately\", \"want to learn Rust\")\n- ❓ Ambiguous: **Ask instead of silently capturing.** E.g., \"TODO: handle that thing\" → reply \"What todo would you like to record? Please specify the task\"\n\n**Operation priority:** If a single message matches both capture and operation triggers, prioritize the operation (complete > delete > modify > capture), do not create duplicates.\n\n**Contradiction handling:** When user message contains conflicting instructions (e.g., \"completed #1 delete #1\" or \"TODO: delete all\"):\n- Operation conflicts: execute the first by priority, ignore the conflicting second, inform user\n- Batch operations (\"delete all\"/\"complete all\"): list affected items, confirm one by one, no silent batch execution\n- Out-of-scope requests (\"sync todos to Feishu\"): reject with \"todo-list only manages local todos, no external sync\"\n\n**Flow:**\n1. Extract task content from user message\n2. If message contains images/attachments, download and save to `${workspace}/todo-list/attachments/`\n3. Parse time requirements (if any)\n4. Parse priority (if any)\n5. Generate unique ID, write to `${workspace}/todo-list/todos.json`\n6. Reply with confirmation (concise one-liner: ID + summary + priority + deadline)\n\n**Time Parsing:**\n- Relative: today, tomorrow, day after tomorrow, next Monday, this Friday, tonight, end of month, etc.\n- Absolute: May 20, 5-20, 2026/5/20, etc.\n- Vague: ASAP, when free, whenever → no deadline set\n- Precision: day-level only, no specific hours\n- Unparseable → no deadline, no follow-up questions\n\n**Priority Parsing:**\n\n| Level | Markers | Natural Language Cues |\n|-------|---------|-----------------------|\n| P0 | `[P0]`, `⚠️` | \"urgent\", \"immediately\", \"right now\", \"must do today\" |\n| P1 | `[P1]` or unmarked | \"important\", \"need to do\" (default) |\n| P2 | `[P2]`, `⚡` | \"urgent but not important\", \"quick one\" |\n| P3 | `[P3]`, `📌` | \"no rush\", \"note to self\", \"whenever\" |\n\nDefault to P1 when unclear.\n\n**Attachment Handling:**\n- Images/files: download to `${workspace}/todo-list/attachments/{todoId}_{original_filename}`\n- Record in json: `attachments: [{path, type}]`, type enum: `image` (images), `file` (other files)\n- When both text and images are present, store both\n\n### 2. Todo Query\n\n**Triggers:** `TODOLIST`, `待办列表`, `查看待办`, `看看待办`, `我有哪些待办`, `今天还有哪些未完成`, `还有什么没做`, \"今天还要干嘛\", \"今天的事做完了没\", \"我的清单\".\n\n**Query Modes:**\n- No filter → all pending todos, sorted by priority\n- By time → pending todos due today/this week/this month\n- By priority → todos at a specific level (e.g., \"what's urgent\")\n\n**Output Format:**\n```\n📋 Pending Todos (X total)\n\n🔴 P0 Urgent & Important\n  #1 Submit weekly report before end of day  📅 Today\n\n🟡 P1 Important\n  #3 Read that paper  📅 Next Monday\n  #5 Clean up desk  (No deadline)\n\n🟠 P2 Urgent but not important\n  #8 Reply to that email  📅 Tomorrow\n\n🟢 P3 No Rush\n  #7 Buy a charging cable  📅 Whenever\n```\n\n### 3. Todo Operations\n\n**Complete:** \"完成了 #1\" or \"TODO 完成 1\" → mark `status: done`, record `completed_at`\n**Delete:** \"删除 #1\" or \"TODO 删除 1\" → reply with the todo's summary, wait for user confirmation. Execute only when user says \"确认\" or \"删\"\n**Modify:** \"#1 改成明天\" → update the corresponding field, reply with confirmation\n\n**Modifiable fields:** `content`, `due_time`, `priority`. Syntax: `#N field:new_value`, e.g., `#1 截止:明天`, `#1 优先级:P0`, `#1 内容:new task description`\n\n**Undo:** When user says \"撤销\" or \"undo\", restore the todo state from the previous version (`todos.json.bak`). Only the most recent operation can be undone.\n\n### 4. Daily Reminder\n\n- **Time:** Every day at 21:00\n- **Setup:** Use OpenClaw cron or `feishu-cron-reminder` skill. Example: trigger a session at 21:00 daily that reads todos.json and filters pending items.\n- **Filter:** Items with `due_time` and `status != done`\n- **Sort:** By priority P0 > P1 > P2 > P3\n- **Output:** Compact list, only pending items. Append action guide: `Reply \"完成 #N\" to mark done · Reply \"TODOLIST\" to view all · Reply \"#N 改成X\" to modify · Reply \"撤销\" to undo`\n- **Skip:** If no reminders needed, don't push\n- **Fallback:** If cron fails or is unavailable, push missed reminders on next user interaction (check `last_reminder_at`, if > 24h ago then push)\n\n## Data Schema\n\nStorage file: `${workspace}/todo-list/todos.json` (`workspace` = current OpenClaw working directory)\n\n```json\n{\n  \"version\": 1,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"Submit weekly report\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:Submit weekly report before end of day\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}\n```\n\nField Reference:\n- `id`: Auto-increment integer, never reuse\n- `content`: Task content (text summary)\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: Deadline date YYYY-MM-DD, nullable\n- `created_at`: Creation time ISO 8601\n- `completed_at`: Completion time ISO 8601, set when done\n- `attachments`: `[{path, type}]` attachment list\n- `source_message`: Original message text\n- `last_reminder_at`: Last reminder time ISO 8601 (for fallback push)\n\n## Concurrency Safety\n\nUse atomic writes for todos.json: write to temp file `todos.json.tmp` first, then `mv` (rename) to replace original. Prevents data loss from concurrent session writes.\n\n## Constraints\n\n- Storage path: `${workspace}/todo-list/` (relative to current working directory)\n- Attachment path: `${workspace}/todo-list/attachments/`\n- ID auto-increments, deleted IDs are never reused\n- Do not modify original user messages\n- Delete operations require secondary confirmation\n- Time parsing precision: day-level only\n- Auto-create `todos.json` and directories if they don't exist\n- Auto-backup previous version to `todos.json.bak` before writing\n- If json parsing fails, attempt recovery from `todos.json.bak`\n- After deleting a todo, attachment files are **retained for 7 days** before cleanup (allows recovery from accidental deletion)\n- Schema upgrade: check `version` field on read; if mismatch, execute migration (e.g., add new fields with defaults) and write back\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn76af6ccjftr7hsds21j60xnn82q1qd\",\n  \"slug\": \"todo-list-promax\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1778938340847\n}\n\nArchive v1.1.0: 2 files, 5866 bytes\n\nFiles: SKILL.md (12348b), _meta.json (135b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: todo-list-promax\nversion: \"1.1.0\"\ndescription: >\n  个人待办事项永久存储、智能分类与定时提醒系统。\n  自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。\n  当用户消息包含以下触发词时激活：\n  【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备忘\"、\"提醒我\"\n  【查询】\"TODOLIST\"、\"待办列表\"、\"查看待办\"、\"看看待办\"、\"我有哪些待办\"、\"今天还有哪些未完成\"、\"还有什么没做\"、\"今天还要干嘛\"、\"今天的事做完了没\"、\"我的清单\"\n  NOT for: 项目管理、日历集成、多人协作、自动执行任务。\n---\n\n# todo-list — 个人待办事项系统\n\n## 语言规则\n\n**检测用户使用的语言，全程使用同一语言输出。** 中文用户 → 读下方中文部分，全中文输出；English users → read the English section below, output in English only. 技术术语（JSON、ID 等）保留原文即可。\n\n---\n\n# 中文版\n\n## 目标\n\n为用户提供一个永久不丢失的待办事项管理系统。自动从聊天消息中捕获待办，智能解析时间和优先级，每日主动提醒未完成任务。\n\n## 核心原则\n\n1. **零摩擦录入** — 用户随意发一句话或一张图，系统自动识别并存储\n2. **永久不丢** — 完成 = 标记 done，不等于删除。已删除 = 真正移除\n3. **智能解析** — 从自然语言自动提取时间、优先级、任务内容\n4. **主动提醒** — 有截止时间的未完成任务，每天 21:00 主动推送\n5. **按需响应** — 用户不问不回复，避免打扰\n\n## 主要职责\n\n### 1. 待办录入\n\n**触发词：** `TODO:`、`帮我记录一下`、`记录：`、`待办：`、`加个待办`、`记一下`、`别忘了`、`记得提醒我`、`回头要做`、`备忘`、`提醒我`。消息中必须包含具体可执行的待办事项内容才能触发录入，纯日常陈述（如\"我打算吃饭\"）不触发。\n**操作优先级**：如果同一条消息同时匹配录入和操作指令（如\"删除这个 TODO: xxx\"），优先执行操作指令（完成 > 删除 > 修改 > 录入），不创建重复待办。\n\n**流程：**\n1. 从用户消息中提取任务内容\n2. 如果消息包含图片/附件，下载并保存到 `workspace/todo-list/attachments/`\n3. 解析时间要求（如有）\n4. 解析优先级（如有）\n5. 生成唯一 ID，写入 `workspace/todo-list/todos.json`\n6. 回复用户确认（简洁一行：ID + 摘要 + 优先级 + 截止时间）\n\n**时间解析：**\n- 相对时间：今天、明天、后天、下周一、本周五、今晚、月底 等\n- 绝对时间：5月20日、5-20、2026/5/20 等\n- 模糊时间：尽快、ASAP、有空时 → 不设截止时间\n- 精确到\"天\"，不支持具体小时\n- 无法解析时 → 不设截止时间，不追问\n\n**优先级解析：**\n\n| 级别 | 标记方式 | 自然语言线索 |\n|------|---------|-------------|\n| P0 | `[P0]`、`⚠️` | \"很紧急\"、\"立刻\"、\"马上\"、\"必须今天\" |\n| P1 | `[P1]` 或不标 | \"重要\"、\"要做\"（默认） |\n| P2 | `[P2]`、`⚡` | \"急但不重要\"、\"顺手做\" |\n| P3 | `[P3]`、`📌` | \"有空再说\"、\"随手记一下\"、\"不急\" |\n\n无法判断时默认 P1。\n\n**附件处理：**\n- 图片/文件：下载到 `workspace/todo-list/attachments/{todoId}_{原文件名}`\n- json 中记录 `attachments: [{path, type}]`，type 枚举：`image`（图片）、`file`（其他文件）\n- 同时有文字和图片时，两者都存储\n\n### 2. 待办查询\n\n**触发词：** `TODOLIST`、`待办列表`、`查看待办`、`看看待办`、`我有哪些待办`、`今天还有哪些未完成`、`还有什么没做`、`今天还要干嘛`、`今天的事做完了没`、`我的清单`。\n\n**查询模式：**\n- 无条件 → 所有未完成待办，按优先级排序\n- 按时间 → 今天/本周/本月到期的未完成待办\n- 按优先级 → 某个级别的待办（如\"有哪些紧急的\"）\n\n**输出格式：**\n```\n📋 未完成待办（共 X 条）\n\n🔴 P0 重要紧急\n  #1 今天下班前提交周报  📅 今天\n\n🟡 P1 重要不紧急\n  #3 看完那篇论文  📅 下周一\n  #5 整理桌面  （无截止时间）\n\n🟢 P3 不急\n  #7 买个充电线  📅 有空再说\n```\n\n### 3. 待办操作\n\n**完成：** \"完成了 #1\" 或 \"TODO 完成 1\" → 标记 `status: done`，记录 `completed_at`\n**删除：** \"删除 #1\" 或 \"TODO 删除 1\" → 回复待删除的 todo 内容摘要（ID + 内容 + 优先级），等用户确认后再移除。用户说\"确认\"或\"删\"时才执行\n**修改：** \"#1 改成明天\" → 更新对应字段，回复确认\n\n### 4. 每日提醒\n\n- **时间：** 每天 21:00\n- **配置方式：** 使用 OpenClaw cron 功能创建每日提醒任务，或参考 `feishu-cron-reminder` skill 的配置方式。示例：每天 21:00 触发一个 session 读取 todos.json 并筛选未完成项推送。\n- **筛选：** 有 `due_time` 且 `status != done` 的待办\n- **排序：** 按优先级 P0 > P1 > P2 > P3\n- **输出：** 紧凑列表，只推未完成的。末尾附操作指引：`回复\"完成 #N\"标记完成 · 回复\"TODOLIST\"查看全部 · 回复\"#N 改成X\"修改`\n- **跳过：** 如果没有需要提醒的待办，不推送\n\n## 数据结构\n\n存储文件：`workspace/todo-list/todos.json`\n\n```json\n{\n  \"version\": 1,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"提交周报\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:今天下班前提交周报\"\n    }\n  ]\n}\n```\n\n字段说明：\n- `id`: 自增整数，不重复使用\n- `content`: 任务内容（纯文本摘要）\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: 截止日期 YYYY-MM-DD，可为 null\n- `created_at`: 创建时间 ISO 8601\n- `completed_at`: 完成时间 ISO 8601，完成时填入\n- `attachments`: `[{path, type}]` 附件列表\n- `source_message`: 原始消息内容\n\n## 约束\n\n- 存储路径：`workspace/todo-list/todos.json`\n- 附件路径：`workspace/todo-list/attachments/`\n- ID 自增，已删除的 ID 不重复使用\n- 不修改用户消息原文\n- 删除操作必须二次确认\n- 时间解析精确到天\n- `todos.json` 或目录不存在时自动创建\n- 写入 json 前自动备份上一版本到 `todos.json.bak`\n- 读取 json 解析失败时，尝试使用 `todos.json.bak` 恢复\n\n---\n---\n\n# English Version\n\n## Goal\n\nProvide a permanent, loss-proof todo management system. Auto-capture todos from chat messages, parse time & priority intelligently, and proactively remind daily.\n\n## Core Principles\n\n1. **Zero-friction input** — User sends a casual message or image, system auto-identifies and stores\n2. **Permanent storage** — Done = mark as done, not delete. Deleted = actually removed\n3. **Smart parsing** — Auto-extract time, priority, and task content from natural language\n4. **Proactive reminders** — Unfinished tasks with deadlines get a daily push at 21:00\n5. **On-demand response** — Don't reply unless asked, avoid disturbance\n\n## Responsibilities\n\n### 1. Todo Capture\n\n**Triggers:** `TODO:`, `帮我记录一下`, `记录：`, `待办：`, `加个待办`, `记一下`, `别忘了`, `记得提醒我`, `回头要做`, `备忘`, `提醒我`. The message must contain a specific, actionable todo item to trigger capture. Casual statements (e.g., \"I'm going to eat\") do not trigger.\n**Operation priority:** If a single message matches both capture and operation triggers (e.g., \"delete this TODO: xxx\"), prioritize the operation (complete > delete > modify > capture), do not create a duplicate todo.\n\n**Flow:**\n1. Extract task content from user message\n2. If message contains images/attachments, download and save to `workspace/todo-list/attachments/`\n3. Parse time requirements (if any)\n4. Parse priority (if any)\n5. Generate unique ID, write to `workspace/todo-list/todos.json`\n6. Reply with confirmation (concise one-liner: ID + summary + priority + deadline)\n\n**Time Parsing:**\n- Relative: today, tomorrow, day after tomorrow, next Monday, this Friday, tonight, end of month, etc.\n- Absolute: May 20, 5-20, 2026/5/20, etc.\n- Vague: ASAP, when free, whenever → no deadline set\n- Precision: day-level only, no specific hours\n- Unparseable → no deadline, no follow-up questions\n\n**Priority Parsing:**\n\n| Level | Markers | Natural Language Cues |\n|-------|---------|-----------------------|\n| P0 | `[P0]`, `⚠️` | \"urgent\", \"immediately\", \"right now\", \"must do today\" |\n| P1 | `[P1]` or unmarked | \"important\", \"need to do\" (default) |\n| P2 | `[P2]`, `⚡` | \"urgent but not important\", \"quick one\" |\n| P3 | `[P3]`, `📌` | \"no rush\", \"note to self\", \"whenever\" |\n\nDefault to P1 when unclear.\n\n**Attachment Handling:**\n- Images/files: download to `workspace/todo-list/attachments/{todoId}_{original_filename}`\n- Record in json: `attachments: [{path, type}]`, type enum: `image` (images), `file` (other files)\n- When both text and images are present, store both\n\n### 2. Todo Query\n\n**Triggers:** `TODOLIST`, `待办列表`, `查看待办`, `看看待办`, `我有哪些待办`, `今天还有哪些未完成`, `还有什么没做`, `今天还要干嘛`, `今天的事做完了没`, `我的清单`.\n\n**Query Modes:**\n- No filter → all pending todos, sorted by priority\n- By time → pending todos due today/this week/this month\n- By priority → todos at a specific level (e.g., \"what's urgent\")\n\n**Output Format:**\n```\n📋 Pending Todos (X total)\n\n🔴 P0 Urgent & Important\n  #1 Submit weekly report before end of day  📅 Today\n\n🟡 P1 Important\n  #3 Read that paper  📅 Next Monday\n  #5 Clean up desk  (No deadline)\n\n🟢 P3 No Rush\n  #7 Buy a charging cable  📅 Whenever\n```\n\n### 3. Todo Operations\n\n**Complete:** \"完成了 #1\" or \"TODO 完成 1\" → mark `status: done`, record `completed_at`\n**Delete:** \"删除 #1\" or \"TODO 删除 1\" → reply with the todo's summary (ID + content + priority), wait for user confirmation before removing. Execute only when user says \"确认\" or \"删\"\n**Modify:** \"#1 改成明天\" → update the corresponding field, reply with confirmation\n\n### 4. Daily Reminder\n\n- **Time:** Every day at 21:00\n- **Setup:** Use OpenClaw cron to create a daily reminder task, or refer to the `feishu-cron-reminder` skill setup. Example: trigger a session at 21:00 daily that reads todos.json and filters pending items for push notification.\n- **Filter:** Items with `due_time` and `status != done`\n- **Sort:** By priority P0 > P1 > P2 > P3\n- **Output:** Compact list, only pending items. Append action guide at end: `Reply \"完成 #N\" to mark done · Reply \"TODOLIST\" to view all · Reply \"#N 改成X\" to modify`\n- **Skip:** If no reminders needed, don't push\n\n## Data Schema\n\nStorage file: `workspace/todo-list/todos.json`\n\n```json\n{\n  \"version\": 1,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"Submit weekly report\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:Submit weekly report before end of day\"\n    }\n  ]\n}\n```\n\nField Reference:\n- `id`: Auto-increment integer, never reuse\n- `content`: Task content (text summary)\n- `status`: `pending` | `done`\n- `priority`: `P0` | `P1` | `P2` | `P3`\n- `due_time`: Deadline date YYYY-MM-DD, nullable\n- `created_at`: Creation time ISO 8601\n- `completed_at`: Completion time ISO 8601, set when done\n- `attachments`: `[{path, type}]` attachment list\n- `source_message`: Original message text\n\n## Constraints\n\n- Storage path: `workspace/todo-list/todos.json`\n- Attachment path: `workspace/todo-list/attachments/`\n- ID auto-increments, deleted IDs are never reused\n- Do not modify original user messages\n- Delete operations require secondary confirmation\n- Time parsing precision: day-level only\n- Auto-create `todos.json` and directories if they don't exist\n- Auto-backup previous version to `todos.json.bak` before writing\n- If json parsing fails, attempt recovery from `todos.json.bak`\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn76af6ccjftr7hsds21j60xnn82q1qd\",\n  \"slug\": \"todo-list-promax\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1778932455902\n}","readmeExcerpt":"Skill: Todo List Promax Owner: z-zihan Summary: 个人待办事项永久存储、智能分类与定时提醒系统。 自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。 当用户消息包含以下触发词时激活： 【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备... Tags: latest:2.2.0 Version history: v2.2.0 | 2026-06-06T04:32:36.862Z | user Auto-publish from commit 4f6929ca2036b88853d5d77542c8355317ee9cac v2.1.0 | 2026-05-22T19:45:17.475Z | user Auto-publish from commit 5a","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"| 内容 | # | P | 截止 | 对接人 | 备注 |\n|---|:---:|:---:|:---:|---|---|\n| 完成课程作业（附实验报告） | 1 | P0 | 今天 | 小李 | |\n| 看完那篇论文 | 3 | P1 | 下周一 | | |\n| 取快递 | 5 | P1 | | | |"},{"language":"json","snippet":"{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"完成课程作业\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"contact\": \"小李\",\n      \"notes\": \"需要附上实验报告\",\n      \"tags\": [\"学习\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"deleted_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:今天下班前完成课程作业，对接人小李，需要附上实验报告\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}"},{"language":"json","snippet":"{\n  \"id\": 1, \"content\": \"...\", \"status\": \"pending|done\",\n  \"priority\": \"P0|P1|P2|P3\", \"due_time\": \"YYYY-MM-DD|null\",\n  \"contact\": \"string (optional)\", \"notes\": \"string (optional)\",\n  \"tags\": [], \"created_at\": \"ISO8601\", \"completed_at\": null,\n  \"deleted_at\": null, \"attachments\": [{\"path\":\"\",\"type\":\"image|file\"}],\n  \"source_message\": \"...\"\n}"},{"language":"text","snippet":"📋 未完成待办（共 X 条）\n\n🔴 P0 重要紧急\n  #1 今天下班前提交周报  📅 今天  👤 对接:张三  🏷 工作\n  📝 备注:需要附上数据报表\n  💬 原文: TODO:今天下班前提交周报，对接人张三，需要附上数据报表\n\n🟡 P1 重要不紧急\n  #3 看完那篇论文  📅 下周一  🏷 学习\n  💬 原文: TODO:看完那篇论文 #学习\n\n  #5 整理桌面  （无截止时间）  🏷 生活\n  💬 原文: 待办：整理桌面\n\n🟠 P2 急但不重要\n  #8 回复那个邮件  📅 明天  👤 对接:李四  🏷 工作\n  💬 原文: reminder: 回复李四那封邮件明天前\n\n🟢 P3 不急\n  #7 买个充电线  📅 有空再说  🏷 购物\n  💬 原文: 备忘：买个充电线"},{"language":"json","snippet":"{\n  \"version\": 2,\n  \"todos\": [\n    {\n      \"id\": 1,\n      \"content\": \"提交周报\",\n      \"status\": \"pending\",\n      \"priority\": \"P0\",\n      \"due_time\": \"2026-05-16\",\n      \"contact\": \"张三\",\n      \"notes\": \"需要附上数据报表\",\n      \"tags\": [\"工作\"],\n      \"created_at\": \"2026-05-16T09:30:00+08:00\",\n      \"completed_at\": null,\n      \"deleted_at\": null,\n      \"attachments\": [],\n      \"source_message\": \"TODO:今天下班前提交周报，对接人张三，需要附上数据报表\"\n    }\n  ],\n  \"last_reminder_at\": \"2026-05-16T21:00:00+08:00\"\n}"},{"language":"json","snippet":"{\n  \"id\": 1, \"content\": \"...\", \"status\": \"pending|done\",\n  \"priority\": \"P0|P1|P2|P3\", \"due_time\": \"YYYY-MM-DD|null\",\n  \"contact\": \"string (optional)\", \"notes\": \"string (optional)\",\n  \"tags\": [], \"created_at\": \"ISO8601\", \"completed_at\": null,\n  \"deleted_at\": null, \"attachments\": [{\"path\":\"\",\"type\":\"image|file\"}],\n  \"source_message\": \"...\"\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: todo-list-promax\nversion: \"2.2.0\"\ndescription: >\n  个人待办事项永久存储、智能分类与定时提醒系统。\n  自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。\n  当用户消息包含以下触发词时激活：\n  【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备忘\"、\"提醒我\"、\"add todo\"、\"remind me to\"、\"don't forget\"、\"note this\"\n  【查询】\"TODOLIST\"、\"待办列表\"、\"查看待办\"、\"看看待办\"、\"我有哪些待办\"、\"今天还有哪些未完成\"、\"还有什么没做\"、\"今天还要干嘛\"、\"今天的事做完了没\"、\"我的清单\"、\"my todos\"、\"todo list\"、\"what's pending\"、\"show todos\"\n  NOT for: 项目管理、日历集成、多人协作、自动执行任务。\n---\n\n# todo-list — 个人待办事项系统\n\n## 语言规则\n\n**检测用户使用的语言，全程使用同一语言输出。** 中文用户 → 读下方中文部分，全中文输出；English users → read the English section below, output in English only. 技术术语（JSON、ID 等）保留原文即可。\n\n---\n\n# 中文版\n\n## 目标\n\n为用户提供一个永久不丢失的待办事项管理系统。自动从聊天消息中捕获待办，智能解析时间和优先级，每日主动提醒未完成任务。\n\n## 核心原则\n\n1. **零摩擦录入** — 用户随意发一句话或一张图，系统自动识别并存储\n2. **永久不丢** — 完成 = 标记 done，不等于删除。已删除 = 真正移除\n3. **智能解析** — 从自然语言自动提取时间、优先级、任务内容\n4. **主动提醒** — 有截止时间的未完成任务，每天 21:00 主动推送\n5. **按需响应** — 用户不问不回复，避免打扰\n\n## 主要职责\n\n### 1. 待办录入\n\n**触发词：** `TODO:`、`帮我记录一下`、`记录：`、`待办：`、`加个待办`、`记一下`、`别忘了`、`记得提醒我`、`回头要做`、`备忘`、`提醒我`、`add todo`、`remind me to`、`don't forget`、`note this`\n\n**模糊输入判定规则：** 消息必须包含**动宾结构**或**明确动作词**才能触发录入。判断标准：\n- ✅ 触发：含动词+宾语（\"完成课程作业\"、\"买充电线\"、\"看完论文\"）\n- ✅ 触发：含明确动作+目标（\"TODO: 复习期末考试\"）\n- ❌ 不触发：纯状态/意向陈述（\"我打算吃饭\"、\"最近好累\"、\"想学 Rust\"）\n- ❓ 模糊时：**追问而非静默录入**。如\"TODO: 搞一下那个东西\" → 回复\"你想记录什么待办？请具体说明一下任务内容\"\n\n**操作优先级**：如果同一条消息同时匹配录入和操作指令（如\"删除这个 TODO: xxx\"），优先执行操作指令（完成 > 删除 > 修改 > 录入），不创建重复待办。\n\n**矛盾请求处理**：当用户消息包含矛盾指令时（如\"完成了 #1 删除 #1\"或\"TODO: 删除所有待办\"）：\n- 操作间矛盾：按优先级执行第一个操作，忽略矛盾的第二个，并告知用户\n- 批量操作（\"删除所有\"/\"完成全部\"）：列出受影响的项目，逐条确认，不可批量静默执行\n- 越界请求（\"帮我把待办同步到飞书项目\"）：拒绝并提示\"todo-list 仅管理本地待办，不支持外部同步\"\n\n**流程：**\n1. 从用户消息中提取任务内容\n2. 如果消息包含图片/附件，下载并保存到 `${workspace}/todo-list/attachments/`\n3. 解析时间要求（如有）\n4. 解析优先级（如有）\n5. **提取对接人（contact）**（见下方对接人提取规则）\n6. **提取备注（notes）**（见下方备注提取规则）\n7. **提取标签（tags）**（见下方标签提取规则）\n8. 生成唯一 ID，写入 `${workspace}/todo-list/todos.json`\n9. 回复用户确认（完整一行：ID + 摘要 + 优先级 + 截止时间 + 对接人 + 标签 + 备注摘要）\n\n**时间解析：**\n- 相对时间：今天、明天、后天、下周一、本周五、今晚、月底 等\n- 绝对时间：5月20日、5-20、2026/5/20 等\n- 模糊时间：尽快、ASAP、有空时 → 不设截止时间\n- 精确到\"天\"，不支持具体小时\n- 无法解析时 → 不设截止时间，不追问\n\n**优先级解析：**\n\n| 级别 | 标记方式 | 自然语言线索 |\n|------|---------|-------------|\n| P0 | `[P0]`、`⚠️` | \"很紧急\"、\"立刻\"、\"马上\"、\"必须今天\" |\n| P1 | `[P1]` 或不标 | \"重要\"、\"要做\"（默认） |\n| P2 | `[P2]`、`⚡` | \"急但不重要\"、\"顺手做\" |\n| P3 | `[P3]`、`📌` | \"有空再说\"、\"随手记一下\"、\"不急\" |\n\n无法判断时默认 P1。\n\n**对接人（contact）提取规则：**\n\n从用户消息中识别对接人/负责人信息，提取到 `contact` 字段：\n\n| 模式 | 示例 | 提取结果 |\n|------|------|---------|\n| \"XX：\" 前缀 | \"小李：输入框跟后台配置联动\" | contact: \"小李\" |\n| \"@XXX\" | \"@小王 翻译完了发过来\" | contact: \"小王\" |\n| \"对接人：XX\" | \"适配 autoclaw，对接人小陈\" | contact: \"小陈\" |\n| \"找XX\" / \"跟XX对接\" | \"找小陈对接多语言\" | contact: \"小陈\" |\n| \"XX给XX后\" | \"小王给翻译文本后加到项目\" | contact: \"小王\" |\n\n提取原则：\n- 如果消息中提及多处人名，提取最直接负责该任务的人\n- 无法确定时 `contact` 为空，不追问\n- **查询输出时**：有 contact → 显示 `👤 对接:XXX`；无 contact → 不显示\n\n**备注（notes）提取规则：**\n\n- **仅当用户明确提供备注信息时才记录**，如\"备注：XX\"、\"注意：XX\"\n- **禁止自动脑补备注**：不要从 content 中推断、不要自行总结、不要把原文复述一遍\n- 飞书文档链接等用户主动发送的参考资料可归入 notes\n- `notes` 为空时不显示\n\n**标签（tags）提取规则：**\n\n默认标签集：`工作`、`学习`、`购物`、`生活`、`健康`、`其他`\n\n提取方式：\n1. **手动指定**：用户使用 `#标签名` 语法，如 `TODO: 完成报告 #工"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn76af6ccjftr7hsds21j60xnn82q1qd\",\n  \"slug\": \"todo-list-promax\",\n  \"version\": \"2.2.0\",\n  \"publishedAt\": 1780720356862\n}"},{"path":"skill-card.md","content":"## Description:\n\nTodo List Promax gives an agent instructions for a persistent personal todo manager that captures tasks from chat text, images, and attachments, categorizes them, and sends daily reminders.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[z-zihan](https://clawhub.ai/user/z-zihan)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users use this skill to let an agent maintain a local personal todo list, including task capture, query, completion, deletion, modification, attachment tracking, and daily reminder setup.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can retain full original user messages, which may include private, business, customer, or credential-like information.\n\nMitigation: Review before installation and change the skill to avoid storing raw original messages by default, with clear retention and deletion controls.\n\nRisk: Contradictory instructions can expose raw source messages during normal todo queries.\n\nMitigation: Remove source_message from normal output and suppress or redact raw message fields in query responses.\n\nRisk: Stored attachments and backups can preserve sensitive todo context after normal task operations.\n\nMitigation: Add explicit controls for reminders, deletion, retention, and purging backups and attachments.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/z-zihan/skills/todo-list-promax)\n- [Publisher profile](https://clawhub.ai/user/z-zihan)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, json, shell commands, configuration, guidance]\n\n**Output Format:** [Natural-language responses, Markdown tables, JSON todo records, and shell command snippets]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May create or update local todo-list files, attachments, backups, cleanup logs, and daily reminder configuration.]\n\n## Skill Version(s):\n\n2.2.0 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"个人待办事项永久存储、智能分类与定时提醒系统。 自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。 当用户消息包含以下触发词时激活： 【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备... Skill: Todo List Promax Owner: z-zihan Summary: 个人待办事项永久存储、智能分类与定时提醒系统。 自动从聊天消息中捕获待办（文字/图片/附件），解析时间与优先级，每日晚上9点推送未完成提醒。 当用户消息包含以下触发词时激活： 【录入】\"TODO:\"、\"帮我记录一下\"、\"记录：\"、\"待办：\"、\"加个待办\"、\"记一下\"、\"别忘了\"、\"记得提醒我\"、\"回头要做\"、\"备... Tags: latest:2.2.0 Version history: v2.2.0 | 2026-06-06T04:32:36.862Z | user Auto-publish from commit 4f6929ca2036b88853d5d77542c8355317ee9cac v2.1.0 | 2026-05-22T19:45:17.475Z | user Auto-publish from commit 5a","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":849,"uniquenessScore":56,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T09:13:22.595Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T09:13:22.595Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T11:55:51.862Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}