mcpField
M
memory-tasks

memory-tasks

github.com/basicmachines-co生产力4.4k1.2k 次安装今天更新
代码仓库

关于 memory-tasks

memory-tasks 是一套基于 Basic Memory schema 系统管理进行中工作的技能,将任务保存为可查询、可验证的知识图谱笔记,便于在上下文压缩或重启后继续处理。

主要功能

  1. 01创建带状态与元数据的任务笔记
  2. 02按状态和字段搜索任务
  3. 03记录步骤、上下文与截止日期
  4. 04通过 schema 验证任务
  5. 05使用校验和避免并发覆盖

适用场景

  1. 01拆分并跟踪多步骤工作
  2. 02上下文压缩后恢复任务
  3. 03压缩前保存任务进度
  4. 04查找阻塞或即将到期的任务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/basicmachines-co/basic-memory --skill memory-tasks

安装后在 Claude Code 中输入/memory-tasks确认已加载。

详细介绍

记忆任务

使用 Basic Memory 的架构系统管理进行中的工作。任务只是带有 type: Task 的笔记——它们存在于知识图谱中,依照架构验证,并且在上下文压缩后仍会保留。

何时使用

  • 开始多步骤工作时(3 个或更多步骤,或任何可能超出上下文窗口的工作)
  • 压缩/重启后——搜索活动任务以继续处理
  • 压缩前刷新——使用当前状态更新所有活动任务
  • 按需——用户要求创建、检查或管理任务时

任务架构

任务使用 BM 架构系统。架构笔记位于 schema/Task.md:

---
title: Task
type: schema
entity: Task
version: 1
schema:
  description: string, what needs to be done
  status?(enum, current state): [active, blocked, done, abandoned]
  assigned_to?: string, who is working on this
  steps?(array): string, ordered steps to complete
  current_step?: integer, which step number we're on (1-indexed)
  context?: string, key context needed to resume after memory loss
  started?: string, when work began
  completed?: string, when work finished
  blockers?(array): string, what's preventing progress
  parent_task?: Task, parent task if this is a subtask
settings:
  validation: warn
---

创建任务

当工作符合条件时,创建一条任务笔记。使用 bm_write,设置 note_type="Task",并将可查询字段放入 metadata:

bm_write(
  title="Descriptive task name",
  directory="tasks",
  note_type="Task",
  metadata={
    "status": "active",
    "priority": "high",
    "assigned_to": "claude",
    "current_step": 1,
    "steps": ["First step", "Second step", "Third step"]
  },
  tags=["task"],
  content="""# Descriptive task name

## Observations
- [description] What needs to be done, concisely
- [status] active
- [assigned_to] claude
- [current_step] 1

## Steps
1. [ ] First concrete step
2. [ ] Second concrete step
3. [ ] Third concrete step

## Context
What future-you needs to pick up this work. Include:
- Key file paths and repos involved
- Decisions already made and why
- What was tried and what worked/didn't
- Where to look for related context"""
)

为什么要同时使用 frontmatter 和 observations? metadata 中的字段(存储为 frontmatter)可通过 filters 用于 bm_search;作为 observations 的字段(- [status] active)可用于 bm_schema(command="validate")。两处都包含可查询字段,才能全面覆盖。

关键原则
  • 步骤要具体且可检查——写“在文件 Y 中实现 X”,而不是“想办法解决问题”
  • 上下文用于在失忆后恢复工作——写得像是在向一个聪明但完全不了解你此前工作的人解释
  • 关系用于链接其他实体——parent_task [[Other Task]]、related_to [[Some Note]]
  • 笔记类型会规范为 snake_case——bm_write(note_type="Task") 会存储为 type: task,而 note_types=["Task"] 和 note_types=["task"] 都能匹配。

压缩后恢复工作

在会话开始时或压缩后:

  1. 搜索活动任务:

    bm_search(note_types=["task"], filters={"status": "active"})
    
  2. 读取任务笔记以获取完整上下文

  3. 使用 context 字段,从 current_step 继续工作

  4. 随进展更新——递增 current_step、更新上下文并勾选已完成的步骤

更新任务

随着工作推进,更新任务笔记:

## Steps
1. [x] First step — done, resulted in X
2. [x] Second step — done, changed approach because Y
3. [ ] Third step — next up

## Context
Updated context reflecting current state...

先将任务读取为 JSON,并在每次编辑时将其校验和作为 expected_checksum 传入。 两个会话经常会更新同一任务,例如在压缩前刷新时;修订冲突表示另一个会话先写入了,因此请重新读取后再写入。

也要更新 frontmatter,使用 command="set_metadata" 和 metadata 参数(正文保持不变):

task = bm_read(identifier="tasks/descriptive-task-name", output_format="json")
bm_edit(
  identifier="tasks/descriptive-task-name",
  command="set_metadata",
  metadata={"current_step": 3},
  expected_checksum=task["checksum"]
)

完成任务

完成后:

status: done
completed: YYYY-MM-DD

简要总结已完成的工作以及后续需要处理的事项。

压缩前刷新

即将发生压缩事件时:

  1. 查找所有活动任务:bm_search(note_types=["task"], filters={"status": "active"})
  2. 对每个任务进行更新:
    • 更新 current_step,使其反映实际进度
    • 在 context 中写入恢复工作所需的所有内容
    • 勾选已完成的步骤
  3. 压缩时,未记录的上下文会丢失

查询任务

借助 BM 的架构系统,可以全面查询任务:

查询查找内容
bm_search(note_types=["task"])所有任务
bm_search(note_types=["task"], filters={"status": "active"})活动任务
bm_search(note_types=["task"], filters={"status": "blocked"})受阻任务
bm_search(note_types=["task"], filters={"assigned_to": "claude"})分配给我的任务
bm_search("blockers", note_types=["task"])存在阻碍的任务
bm_search(note_types=["task"], time_kind="due", valid_overlaps="[2026-10-14,2026-10-21)")本周有步骤到期的任务
bm_schema(command="validate", note_type="Task")根据架构验证所有任务
bm_schema(command="diff", note_type="Task")检测架构与实际任务笔记之间的偏差
截止日期

为步骤或任务设置带限定符的截止日期(参见 memory-notes),这样只需一次搜索就能查找“即将到期”的事项:

- [deadline] @due:2026-10-20 Draft ready for review

精确到日的截止日期从当天起计,因此搜索本周到期事项时也会返回逾期事项。

指南

  • 每个工作单元只处理一项任务——不要把多个项目塞进一项任务中
  • 尽早外化信息——注意到问题时就记录下来
  • 背景 > 步骤——步骤告诉你要做什么;背景告诉你原因和方法
  • 关闭已完成的任务——不要让已完成的工作仍处于 active 状态
  • 关联相关任务——使用 parent_task [[X]] 或关系来关联相关工作
  • Schema 验证是你的好帮手——定期运行 bm_schema(command="validate", note_type="Task"),以发现未完成的任务

评论

支持 Markdown