Skill v1.0.0
currentAutomated scan100/100name: todo-list description: 个人待办(todolist)增删改查工具,支持项目/子任务多级嵌套、父级进度自动汇总、软删除回收站。只要用户以 "ta#" 开头发指令(如 ta#加个任务、ta#看看有什么没做完、ta#把第2条完成、ta#删除第3条、ta#还原),就必定使用本 skill 解析意图并调用脚本执行。也用于用户提到 todo/待办/任务清单/项目分期/子任务 时。 metadata: version: "1.0.0"
todo-list(个人待办清单)
管理用户的个人待办事项,数据持久化在 ~/.todo/todo.json(跨会话、跨项目)。支持多级父子嵌套(项目→子任务→子子任务)、父级自动汇总子任务进度、软删除回收站(可还原/彻底清空)。
关键:统一入口 ta#
用户会用 `ta#` 开头的自然语言发起 todolist 操作,例如:
ta#加个任务:写周报ta#看看我有哪些没做完的ta#在 学习编程 下建个子任务 掌握基础语法ta#把第 2 条标记完成ta#删除第 3 条ta#看看回收站ta#还原第 2 条ta#清空回收站
只要消息以 ta# 开头(即使用户没明说"待办/todo"),一律进入本 skill:解析 ta# 后面的自然语言 → 确定意图和参数 → 调用脚本执行 → 把脚本的中文输出原样汇报给用户。非 ta# 开头的内容不要触发。
执行入口
脚本固定在 C:/Users/bddxg/.agents/skills/todo-list/scripts/todo.js(字符集 UTF-8。若移动了 skill,按当前 skill 目录下的 scripts/todo.js 找)。
统一调用方式(Windows 下用反斜杠分隔亦可):
node <skill目录>/scripts/todo.js <命令> <参数>
务必调用脚本执行,不要用 `node -e` 临场改 JSON——所有逻辑(id 分配、父子汇总、软删除、原子写入)都已在脚本内实现,临场重写既慢又易错。
脚本执行后,把它 stdout 的中文结果直接读给/展示给用户即可(脚本已处理所有回显和提示,无需二次加工)。
脚本内置交互自足能力:node todo.js help(或-h/无参数)可查看完整用法与示例;数据文件~/.todo/todo.json不存在时,脚本会自动创建并在首次操作时输出提示。当解析的脚本命令遇到困惑时,可先跑help确认正确写法。
意图 → 命令映射
把 ta# 后的自然语言按上表解析成脚本命令。识别序号时,用户说的「第 N 条 / N 号 / #N」对应列表里显示的层级序号(如 4.1、4.2),脚本会自动解析为内部 id。若用户用标题/描述指代某条,先跑 list 找到对应层级序号再操作。
| 用户意图(示例说法) | 脚本调用 | |||||
|---|---|---|---|---|---|---|
添加顶层任务<br>加个任务:xxx、新建议题 xxx、记一下 xxx | todo.js add --title "标题" | |||||
批量添加(推荐用于创建子任务)<br>在 <父> 下批量建子任务、一口气加一堆 | todo.js batch-add --parent <父id> --title "标题1" --title "标题2" --title "标题3" | |||||
添加子任务(单条)<br>在 <父> 下建个 xxx、加个子任务 xxx | todo.js add --parent <父id> --title "标题" | |||||
| 添加时带附加信息 | 追加 `--priority 高\ | 中\ | 低(优先级)、--due YYYY-MM-DD(截止日期)、--repeat daily\ | weekly\ | monthly`(循环类型)。未提到就不传,脚本自动留空 | |
创建循环任务<br>每天重复:xxx、每周一写周报、每月15号还信用卡 | todo.js add --title "标题" --repeat daily(每日)<br>todo.js add --title "标题" --repeat weekly --every 周一(每周)<br>todo.js add --title "标题" --repeat monthly --every 15(每月)<br>没指定 --due 时自动计算第一个截止日期 | |||||
设置/修改循环<br>把第 N 条改成每日重复、改为每周三 | `todo.js edit <序号> --repeat daily\ | weekly\ | monthly<br>修改每周需加 --every 周几,修改每月需加 --every 日` | |||
取消循环<br>取消第 N 条的循环、第 N 条不再重复 | todo.js edit <序号> --repeat off | |||||
列出/查看全部<br>看看、列出、有什么没做完的、查一下 | todo.js list | |||||
| 排序查看 | `todo.js list --sort priority\ | due\ | id` | |||
查看单条+子任务<br>看看第 N 条详情、查一下 xxx | todo.js show <序号> | |||||
批量完成(推荐)<br>完成 4.1 4.2 4.3、把这3个做完 | todo.js batch-done 4.1 4.2 4.3 | |||||
标记完成<br>把第 N 条完成、第 N 条搞定、勾掉 xxx | todo.js done <序号> | |||||
取消完成<br>恢复未完成、取消完成 xxx | todo.js undo <序号> | |||||
改标题<br>改第 N 条标题为 xxx、重命名 xxx | todo.js edit <序号> --title "新标题" | |||||
设优先级<br>给第 N 条设高优先级 | `todo.js prio <序号> 高\ | 中\ | 低\ | 无` | ||
设截止日期<br>第 N 条截止到 2026-03-01 | `todo.js due <序号> YYYY-MM-DD\ | 无` | ||||
删除(软删除入回收站)<br>删掉第 N 条、移除 xxx | todo.js del <序号> | |||||
查看回收站<br>回收站、看下已删除的 | todo.js trash | |||||
还原<br>还原第 N 条、找回 xxx | todo.js restore <序号> | |||||
清空回收站<br>清空回收站、彻底删除 | todo.js empty-trash |
循环任务自动生成下一周期:标记完成一个循环任务时,脚本自动创建下一个周期副本,旧副本在 list 中隐藏。用show可查看历史副本。批量创建子任务务必使用 `batch-add`:一条命令一次 load/save,避免并发冲突和顺序错乱。示例:todo.js batch-add --parent 4 --title "子任务A" --title "子任务B" --title "子任务C"会按参数顺序依次分配 id 并追加,保证顺序正确。批量完成用 `batch-done`:todo.js batch-done 4.1 4.2 4.3一次性完成多条。所有操作命令均支持层级序号:done 4.1、del 4.10、show 4.5等,无需查内部 id。多条并列意图(ta#加一个打包上线,顺便看看今天的)可顺序执行多个脚本调用。
数据模型与规则
~/.todo/todo.json 结构(扁平数组 + parent_id 形成树,deleted 实现软删除):
{ "next_id": 5, "items": [{ "id": 1, "title": "学习编程", "done": false, "parent_id": null,"created_at": "...", "deleted": false, "priority": null, "due_date": null },{ "id": 2, "title": "写日报", "done": false, "parent_id": null,"created_at": "...", "deleted": false, "priority": null, "due_date": "2026-03-18","recurrence": { "type": "daily" },"recurrence_group_id": "rec_xx_xxxx" }] }
需要遵循的约束(脚本已内置,但理解它们有助于正确引导用户、准确把自然语言映射到命令):
- 优先级 `priority`:
高/中/低/null(未设置)。 - 截止 `due_date`:
YYYY-MM-DD或null(未设置)。 - 循环 `recurrence`:
{ type: "daily" }/{ type: "weekly", day: 1-7 }/{ type: "monthly", date: 1-31 }/null。 - 循环分组 `recurrence_group_id`:同一循环任务的不同实例共享此 id,用于关联和隐藏历史副本。
- 父级自动汇总:有子任务的条目不能手动 done/undo,其完成状态由「所有直接子任务是否完成」自动推出,
list会显示子任务 x/y与完成符号。想让父级"完成",去完成它的子任务即可。 - 已完成条目默认隐藏:
list只展示未完成的条目(含部分完成的父级);已完成的叶子及整棵已完成子树不显示,但序号位置保留(如 1.1 完成后仍从 1.2 开始显示),确保done 1.2等序号操作不受影响。全部完成时输出🎉 全部完成!。 - 软删除:
del只是标记deleted=true(连带其整个子树);trash看回收站,restore还原(连带子树),empty-trash才物理删除。 - 循环任务规则:
- 标记完成时自动生成下一周期副本(旧副本在 list 中隐藏,
show仍可查看)。 - 生成副本时复制标题、优先级、父级关系、循环配置。
- 未指定
--due时,脚本自动计算第一个截止日期(每日→今天,每周→最近的目标日,每月→最近的目标日)。 undo一个循环任务时,如果同组已有更新的副本会被拒绝,提示用户操作新副本。- id 自动分配、不复用;显示按创建顺序。
输出铁律(硬规则,违反 = 不合格)
1. 原样输出,绝不二次加工
脚本 stdout 的结果原样展示给用户,不得做任何重新排版、格式化、换表格、加表格、摘要、精简、美化。脚本已经精心设计了输出格式,不需要也不允许再加工。
禁止行为:
- ✗ 把 list 的文本输出改成 Markdown 表格
- ✗ 把脚本输出摘要成几句话
- ✗ 给输出加上额外的 emoji、分隔线、标题
- ✗ 对完成度做二次计算再展示
正确做法:脚本返回什么 → 用户看到什么,一字不差。
2. 简单操作零冗余
对于 list、trash、show 这类纯查询操作:
- 不要重新读取 SKILL.md——你已经在执行上下文里了,规则你已经知道
- 不要解析意图——
看看/查看/列一下就是list,直接执行 - 不要多余步骤——一条
node todo.js list直接跑,跑完原样展示,结束
查询类操作的目标耗时:脚本执行 + 原样回显 = 结束,不做任何其他事。
3. 速度优先
用户的待办数据就在那,脚本跑一下只要几百毫秒。任何不必要的额外工具调用(重读 skill、查文档、做分析)都是浪费时间。每次操作只调用一个脚本命令,不要做多个无关调用。
边界处理
- 用户省略优先级/截止日期 → 不传参数,保持留空,不要替用户假设默认值。
- 用户对一个有子任务的条目说"完成" → 按脚本提示,引导其完成子任务,父级自动更新。
- 对已删除条目再
del/ 已还原条目再restore→ 脚本会给出友好报错,把报错原样汇报即可。 - 识别到的 id 不存在 → 先
list让用户确认编号,避免误删。