关于 daily-task-manager
daily-task-manager 是一项将任务维护在 brain 页面 ops/tasks.md 中的技能,支持稳定 ID、优先级和任务状态流转。它可安全查看和更新任务,保留无关内容,并要求删除前确认。
主要功能
- 01任务状态流转与优先级
- 02用于定位任务的稳定 ID
- 03按优先级分组查看任务
- 04记录完成日期与延期原因
- 05最小化编辑并保留其他内容
适用场景
- 01添加任务并设置优先级
- 02按优先级查看任务
- 03完成或延期已有任务
- 04确认后删除任务
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ garrytan/ gbrain --skill daily-task-manager安装后在 Claude Code 中输入/daily-task-manager确认已加载。
附带文件routing-eval.jsonl
详细介绍
每日任务管理器
契约
本技能保证:
- 任务以结构化格式存储为一个知识页面(
ops/tasks.md),每个任务都有稳定的id - 任务生命周期:添加 → 进行中 → 完成 | 延期 | 删除
- 优先级:P0(紧急)、P1(今天)、P2(本周)、P3(待办池)
- 已完成的任务按完成日期归档;延期的任务需附带目标日期和原因
- 变更操作不会丢弃无关任务或未知章节
- 每个操作都会返回下方定义的结构化结果(Returns)
Returns
每次操作后,都要返回结构化结果,以便调用方(包括子 Agent)可靠地串联执行:
{action, task_id, status: ok|not_found|ambiguous|needs_confirmation, priority, date, page: "ops/tasks.md", saved: true|false}
对于 review,返回按组划分的活动任务列表,而不是单个 task_id。当使用触发词 "task list json" 调用时,返回 JSON 数组,其中每个任务对象为 {id, description, priority, due, status},而不是 Markdown。
工具接口
只能使用已声明的工具:用 get_page("ops/tasks.md") 读取,用 put_page("ops/tasks.md", …) 写入,用 add_timeline_entry 记录审计轨迹,用 search 进行交叉引用。不要从本技能中调用 gbrain 命令行动词;工具才是接口。(当用户在 Agent 之外手动运行时,对应的命令行等价写法为 gbrain get ops/tasks / gbrain put ops/tasks,它们仅为等价替代,不是本技能的接口。)
操作路由
在修改状态之前,先确定性地映射用户意图:
- "add / remind me to / put X on my list"(添加 / 提醒我 / 把 X 加入清单)→ 添加
- "done with X / finished X / completed X / ✅ X"(X 做完了 / 完成了 X / ✅ X)→ 完成
- "push X / defer X / move X to next week"(推迟 X / 把 X 挪到下周)→ 延期
- "delete X / remove X / kill task X"(删除 X / 移除 X / 取消任务 X)→ 删除(仅限明确的删除用词,绝不推断为删除)
- "what are my tasks / task list / what's on my plate (today)"(我的任务有哪些 / 任务列表 / 今天有什么安排)→ 回顾("today" 会筛选为 P0 + P1)
阶段
- 加载。 调用
get_page("ops/tasks.md")。首次运行: 如果页面不存在,则根据输出格式模板创建该页面,然后继续。 - 校验。 通过操作路由确定操作类型。如果缺少必填字段(参见各操作的具体规则),在修改状态之前提出一个简洁的澄清问题。绝不捏造优先级、截止日期或延期原因。
- 确定目标任务(完成/延期/删除):如果提供了
id,则按id匹配;否则仅在活动任务中对描述进行模糊匹配。无匹配 → 返回not_found,不做修改。多个匹配 → 列出带 ID 的候选项,返回ambiguous,不做修改。 - 执行:
- 添加: 必须提供描述。优先级:使用用户明确说明或显而易见暗示的级别;否则默认为 P3,并在回复和时间线条目中说明。仅当用户提供或在其表述中明确给出时才设置截止日期。生成新的任务 ID(
t-YYYYMMDD-NN,NN 为当天的下一个可用序号)。添加一条时间线条目。 - 完成: 标记为
[x],移入已完成,并附上(completed: YYYY-MM-DD)。 - 延期: 必须提供目标日期或时间范围以及原因;若缺失则询问。移入已延期,保留原始文本、ID 和优先级,除非用户更改了它们。
- 删除: 具有破坏性,除非用户的消息中已明确包含确认,否则必须获得明确确认。优先建议改为完成或延期。
- 回顾: 只读,绝不修改。按优先级分组列出活动任务,并显示 ID。
- 添加: 必须提供描述。优先级:使用用户明确说明或显而易见暗示的级别;否则默认为 P3,并在回复和时间线条目中说明。仅当用户提供或在其表述中明确给出时才设置截止日期。生成新的任务 ID(
- 保存。 任何修改之后调用
put_page("ops/tasks.md")。遵循差异思维:只修改受影响的行,保留其他所有内容,包括本技能无法识别的章节。
边界情况
- 首次运行: 页面不存在 → 在执行操作前先根据模板创建;
status: ok,并注明"initialized"。 - 页面格式错误: 如果
ops/tasks.md存在但不符合结构规范,不要整体重写。应在其中进行最小化的追加或编辑,原样保留未知内容,并在回复中标记该格式错误。 - 重试/重复添加: 如果活跃任务中已存在相同描述,不要重复添加,而是改为报告已有任务的 ID。
- 日期: 全部使用 ISO 8601(
YYYY-MM-DD)格式。"今天"/"下周"需通过代码或系统时钟计算,切勿猜测。 - 页面标识符: 在工具调用中始终使用
ops/tasks.md(包含扩展名),这是唯一的规范位置。 - 单写入者假设(并发限制)。 任务操作采用读-改-写流程:
get_page("ops/tasks.md")→ 编辑 →put_page("ops/tasks.md")。put_page会替换整个页面,且没有比较并交换(compare-and-swap)机制,因此两次交错的修改会出现"最后写入者胜出"的情况:第二次put_page会覆盖第一次的变更(已完成的任务重新出现,新添加的任务消失),并且t-YYYYMMDD-NN的编号分配可能会把同一个序号分给两个并发的添加操作(产生重复 ID)。务必串行化任务编辑——切勿对ops/tasks.md并行执行任务修改(多个子 Agent、并发的聊天轮次)。如果修改可能发生竞争,应在put_page之前立即重新执行get_page,并基于刚读取的最新页面重新推导下一个可用序号。
输出格式
持久化页面格式
每个任务都带有稳定的 ID,以便后续操作能够安全地定位该任务:
# Tasks
## P0 — Urgent
- [ ] {task description} (due: {date})
## P1 — Today
- [ ] {task description} (due: {date optional})
## P2 — This Week
- [ ] {task description} (due: {date optional})
## P3 — Backlog
- [ ] {task description}
## Deferred
- [ ] {task description} (deferred until: {date}; reason: {reason})
## Completed
- [x] {task description} (completed: {date})
面向用户的回复
执行修改后:用一行简洁的说明,包括操作、任务 ID、优先级/状态、相关日期,以及是否已保存。进行回顾时:按优先级分组列出活跃任务。回复保持简洁;在狭窄的聊天界面上避免使用表格。
失败处理
对于任何 gbrain 错误 code、退出码、[AGENT] 块或通知块,均遵循 Agent 操作员协议。针对本技能的具体规定如下:
- 任务页面更新返回
revision_conflict:重新读取ops/tasks.md,重新应用那一项任务变更,然后保存;切勿基于旧的读取结果覆盖整个列表。 write_pending(退出码 10):报告saved: false并附上待处理回执,然后轮询gbrain write-request <request_id>;在此之前不要告诉用户任务已记录。- 任务 ID 不明确或缺失:返回
ambiguous/not_found,并询问用户具体是哪一项任务;切勿对最接近的匹配项进行修改。
反模式
每条均附带对应的纠正措施:
- 添加任务时未指定优先级 → 默认设为 P3,并且必须告知用户已应用默认值(绝不静默处理)。
- 基于不明确的引用进行修改 → 停止操作,列出带 ID 的候选项,并询问用户。
- 完成任务时未记录完成日期 → 必须始终标注
(completed: YYYY-MM-DD)。 - 推迟任务时缺少目标日期和原因 → 先询问这两项信息。
- 未经明确确认即删除 → 先确认;改为提供完成或推迟的选项。
- 整体覆盖页面或丢弃未知章节 → 仅进行最小化的差异编辑。
- 使用未声明的工具或命令行动词 → 仅限
get_page/put_page/search/add_timeline_entry。 - 捏造截止日期、优先级或原因 → 切勿擅自补充必填字段;应询问用户。
- 列表无限增长 → 当待办列表(Backlog)超过约 20 项时,提示进行每周回顾。
- 将任务存储在大脑页面之外 → 所有任务都必须保存在
ops/tasks.md中(可搜索)。 - 对
ops/tasks.md并行执行任务修改 → "最后写入者胜出"的整页put_page会静默丢失更新并产生重复 ID;应串行化编辑,并在写入前立即重新读取。
设计依据(本版本修复的失败模式)
- 接口漂移: 早期版本将
get_page/put_page声明为工具,但正文却给出命令行动词,模型会随机选择其中之一。现在以声明的工具作为接口,命令行仅作为与人工操作等价的说明保留。 - 无法匹配的任务: 没有任务 ID 时,在两个相似任务之间执行"完成部署任务"会静默修改错误的任务。稳定的
t-YYYYMMDD-NNID 加上失败即关闭(fail-closed)的歧义处理可以解决此问题。 - 首次运行崩溃: 假设
ops/tasks.md已存在,会使缺失页面的行为未定义。首次运行时从模板创建可以解决此问题。 - 整体覆盖风险: "写入更新后的任务列表"容易导致整页重写,从而丢失并发编辑。最小差异原则加上保留未知内容的规则可以解决此问题。