mcpField
D
daily-task-manager

daily-task-manager

github.com/garrytan生产力31.3k267 次安装今天更新
代码仓库

关于 daily-task-manager

daily-task-manager 是一项将任务维护在 brain 页面 ops/tasks.md 中的技能,支持稳定 ID、优先级和任务状态流转。它可安全查看和更新任务,保留无关内容,并要求删除前确认。

主要功能

  1. 01任务状态流转与优先级
  2. 02用于定位任务的稳定 ID
  3. 03按优先级分组查看任务
  4. 04记录完成日期与延期原因
  5. 05最小化编辑并保留其他内容

适用场景

  1. 01添加任务并设置优先级
  2. 02按优先级查看任务
  3. 03完成或延期已有任务
  4. 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)

阶段

  1. 加载。 调用 get_page("ops/tasks.md")。首次运行: 如果页面不存在,则根据输出格式模板创建该页面,然后继续。
  2. 校验。 通过操作路由确定操作类型。如果缺少必填字段(参见各操作的具体规则),在修改状态之前提出一个简洁的澄清问题。绝不捏造优先级、截止日期或延期原因。
  3. 确定目标任务(完成/延期/删除):如果提供了 id,则按 id 匹配;否则仅在活动任务中对描述进行模糊匹配。无匹配 → 返回 not_found,不做修改。多个匹配 → 列出带 ID 的候选项,返回 ambiguous,不做修改。
  4. 执行:
    • 添加: 必须提供描述。优先级:使用用户明确说明或显而易见暗示的级别;否则默认为 P3,并在回复和时间线条目中说明。仅当用户提供或在其表述中明确给出时才设置截止日期。生成新的任务 ID(t-YYYYMMDD-NN,NN 为当天的下一个可用序号)。添加一条时间线条目。
    • 完成: 标记为 [x],移入已完成,并附上 (completed: YYYY-MM-DD)。
    • 延期: 必须提供目标日期或时间范围以及原因;若缺失则询问。移入已延期,保留原始文本、ID 和优先级,除非用户更改了它们。
    • 删除: 具有破坏性,除非用户的消息中已明确包含确认,否则必须获得明确确认。优先建议改为完成或延期。
    • 回顾: 只读,绝不修改。按优先级分组列出活动任务,并显示 ID。
  5. 保存。 任何修改之后调用 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-NN ID 加上失败即关闭(fail-closed)的歧义处理可以解决此问题。
  • 首次运行崩溃: 假设 ops/tasks.md 已存在,会使缺失页面的行为未定义。首次运行时从模板创建可以解决此问题。
  • 整体覆盖风险: "写入更新后的任务列表"容易导致整页重写,从而丢失并发编辑。最小差异原则加上保留未知内容的规则可以解决此问题。

评论

支持 Markdown